这篇接着写注入的形式!我们先在上次的项目中修改!继续在fengyan包下添加一个Home.java类:





















































而运行的测试文件仅仅加入System.out.println(user.getMyhome().getAddress());即可得到注入的地址






































我们将applicationContext.xml文件中user bean的属性autowire由默认的default改为consctructor也就是构造,



























此时我们直接运行,发现依然成功!得到了“湖北 武汉”,为什么它能自动输出呢,也就是我们的User.java中本身有二个属性 userName 和myhome,其中有一个属性我们设定了,另外一个没有设定,这时它就会去找,那么找的时候有下面几种方式,这里我说说bean中的autowire属性,它有以下几种取值:
autowire="byType",可以使bean在运行的时候根据需要去寻找同类型的已经在applicationContext.xml中定义了的属性,如果找不到,则处于未绑定状态。
autowire="byName",可以使bean在运行时根据需要去寻找同名的已在applicationContext.xml中定义的属性,如果找不到处于未绑定状态。
autowire="autodetect":这个是一个个式,直到找到合适的!
autowire="constractor",可以使bean在运行的时候根据已在applicationContext.xml中定义的的属性去寻找相关的构造方法属性,如果找不到则牌未绑定状态,它使用的是byType,
我们如果将autowire="constractor"改为byType,如果我们定义了多个Home类型的bean则运行的时候会出错,因为有多个类型满足条件!这时可以换为byName,aotuwrie="byName"这里的name是哪里的呢?这里的名字应该是User.java类中定义的属性 private Home myhome;的 myhome同名即可!这时要注意一下,在User.java中加入一个无参数的构造函数!
这时如果我们将注入的user bean复制一份 user2,那么在程序中就可以输出user和user2的内容完全一样,但它们的getMyhome()的Home对象是不是同一个注入的myhome对象呢,我们可以用user.getMyhome().hashcode();发现是完全一样的,由此可知它们所使用的是同一个Home对象!
这样我们明白一件事情,就是上面我们注入的myhome Bean只创建了一次,那么什么时候会创建一次,什么时候会创建多次呢,我们可以看到在bean 中有一属性singleton,在设计模式中也有这样一种模式,单例模式!由此可知如果我们将 真值改为false,则就会在程序运行中创建多个myhome Bean
这时我们再改改,将User.java中的Home属性 ,改为Home[] myhome,以为一集合!或者说是一列,集合,MAP怎么办,

在applicationContext.xml中添加Home[]信息,如下:












这时我们得到正确输出!这时说明数组成功了!
这是对象集合,那么List呢,我们再在配置文件中将user Bean添加一属性:







可知该List中有对象也有普通值!在TestMain中我们这样使用:






















它是键值对的形式,我们添加一个KEY:t1值为对象类型,。我们引用的上面注入的myhome Bean!
配置文件user Bean添加的属性代码如下














