本章主要介绍自动装配的几种方式,介绍前章依赖注入的方式和装配属性:
3359 blog.csdn.net/QQ _ 34598667/article/details/83308071
自动装配自动装配的一些方法Spring容器可以具有自动装配相互协作的 bean 之间的关系,而不使用constructor-arg和property元素,从而创建大型基于Spring的APP应用程序
使用bean元素的autowire属性指定bean定义的自动装配模式。
本节介绍了一些autowire值,这些值表示自动装配的几种方法
案例准备:基于上一个案例的实体类Person和Man
o缺省设置,无自动装配
我不举例子
byName :按属性名称计算将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。
按如下方式定义applicationContext.xml文件:
! -- setter注入--bean id=' person ' class=' com.oak.entity.person ' property name=' age ' value=' 18 '/propertyname --byName是根据属性名称自动组装的--bean id=' man ' class=' com.oak.entity.man ' auto wire=' by name '//
@ testpublicvoidtest 05 ((application contextctx=newclasspathxmlapplication context.XML ); person person=CTX.get bean (' person ',Person.class ); system.out.println(Person ); manman=CTX.getbean('man ',Man.class ); system.out.println(man; }要显示控制台输出:
Person [name=二蛋,age=18]Man [person=Person [name=二蛋,age=18]]组装成功
Man属性person会自动检测id/name为person的bean,如果没有定义为person的bean,则程序集将失败。 例如,在xml中将bean为person的名称更改为person1。
! -- setter注入--bean id=' person1' class=' com.oak.entity.person ' property name=' age ' value=' 18 '/propertyname --byName是根据属性名称自动组装的--bean id=' man ' class=' com.oak.entity.man ' auto wire=' by name '//
Person [name=双蛋,age=18]Man [person=null]自动组装失败
byType :类型匹配配置文件中由属性数据类型自动装配的准确bean名称。
直接修改轮廓的组件类型为byType
! --byType根据属性名称自动组装--bean id=' man ' class=' com.oak.entity.man ' auto wire=' by type '/bean其他不做更改
控制台的结果是:
即使找不到与Person [name=二蛋,age=18]Man [person=Person [name=二蛋,age=18]]属性名称相同的bean,也可以进行组装。 因为它会根据属性类型进行搜索。
但是,如果有多个具有相同属性的bean,则会报告异常。 例如,将xml文件修改为:
! -- setter注入--bean id=' person1' class=' com.oak.entity.person ' property name=' age ' value=' 18 '/propertyname -- setter注入--bean id=' person2' class=' com.oak.entity.person ' property name=' age ' value=' 19 property name beanbeanid=' man ' class=' com.oak.entity.man ' auto wire=' by type '/bean继续测试test05方法,Junit异常
与constructor:bytype一样,在应用于构造函数并测试此方法时,请记住实体类必须具有bean参数类型的构造函数
公共人(个人个人) {super ); this.person=person; 修改xml配置文件
! -- setter注入--bean id=' person1' class=' com.oak.entity.person ' property name=' age ' value=' 18 '/property ne
Person [name=二蛋,age=18]Man [person=Person [name=二蛋,age=18]] constructor自动组装具有与byType自动组装相同的局限性。 如果发现多个Bean与对构造函数的参与相匹配,则Spring不会尝试推测哪个Bean适合自动程序集,并且程序集将失败。 此外,如果类具有多个构造函数,并且它们都满足自动程序集的条件,则Spring不会尝试推测哪个构造函数更合适。
autodetect Spring首先在构造器中尝试使用自动装配进行连接,如果未执行,则Spring将在byType中尝试自动装配。
如果希望自动装配bean,但无法确定使用哪种类型的自动装配,则可以将spring确定的autowire特性设置为autodetect
不要举例~
在下一章中,基于注释的自动组装(汇编扫描) :