Spring自动装配的5中方式

Spring auto-wire的 五种方式:byName和byType对应bean文件中的id和class

1:no 默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean

2:byName 通过参数名 自动装配,如果一个bean的name 和另外一个bean的 property 相同,就自动装配。

将它的属性与在配置文件中被定义为相同名称的 beans 的属性进行连接。

定义applicationContext.xml文件为:

 

   

       

       

   

 

   

在test类中添加test05方法并测试:

@Test

public void test05(){

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

Person person=ctx.getBean("person",Person.class);

System.out.println(person);

Man man=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:

 

   

       

       

   

 

   

修改测试test05得到id为person1的bean,控制台结果为

Person [name=二蛋, age=18]

Man [person=null]

自动装配失败

3:byType 通过参数的数据类型自动自动装配,如果一个bean的数据类型和另外一个bean的property属性的数据类型兼容,就自动装配

byType:由属性数据类型自动装配

它的类型匹配配置文件中的一个确切的 bean 名称,直接修改配置文件中的装配类型为byType

 

   

其他不用修改,直接测试test05方法:

控制台结果为:

Person [name=二蛋, age=18]

Man [person=Person [name=二蛋, age=18]]

就算找不到与属性名相同的bean也能装配成功,因为是根据属性类型查找的。

但是当出现多个同一属性的bean时会报异常,例如,修改xml文件如下:

   

   

   

   

   

     

   

   

   

 

   

继续测试test05方法,Junit测试出异常

4:construct 构造方法中的参数通过byType的形式,自动装配。

constructor:与byType类似,应用于构造函数

测试此方式时不要忘记在实体类中需要带有bean参数类型的构造方法

public Man(Person person) {

super();

this.person = person;

}

修改xml配置文件

   

   

   

   

   

   

   

测试test05方法,控制台结果为:

Person [name=二蛋, age=18]

Man [person=Person [name=二蛋, age=18]]

constructor自动装配具有和byType自动装配相同的局限性。当发现多个Bean匹配某个构造器的入参时,Spring不会尝试猜测哪一个Bean更适合自动装配,会装配失败。此外,如果一个类有多个构造器,它们都满足自动装配的条件时,Spring也不会尝试猜测哪一个构造器更适合使用。

5:auto detect 如果有默认的构造方法,通过 construct的方式自动装配,否则使用 byType的方式自动装配。

autodetect

Spring首先尝试通过 constructor 使用自动装配来连接,如果它不执行,Spring 尝试通过 byType 来自动装配。

如果想要自动装配bean,但是又不能决定该使用哪一种类型的自动装配,那么可以设置autowire属性为autodetect,由spring 来决定

就不举例了~



@autowired的使用和原理

https://blog.csdn.net/topdeveloperr/article/details/87971446

你可能感兴趣的:(Spring自动装配的5中方式)