Spring学习笔记5:bean的装配方式
Posted Vincent9847
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习笔记5:bean的装配方式相关的知识,希望对你有一定的参考价值。
环境:
public class Cat {
public void shout() {
System.out.println("miao~");
}
}
public class Dog {
public void shout() {
System.out.println("wang~");
}
}
public class User {
private Cat cat;
private Dog dog;
private String str;
}
一、xml配置:
1.no:默认方式-手动装配方式
需要通过ref设定bean的依赖关系
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dog" class="com.pojo.Dog"/>
<bean id="cat" class="com.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User">
<property name="cat" ref="cat"/>
<property name="dog" ref="dog"/>
<property name="str" value="xiaoyi"/>
</bean>
</beans>
2.byName
autowire byName (按名称自动装配):根据bean的名字进行装配,当一个bean的名称和其他bean的属性一致,则自动装配。
<bean id="user" class="com.pojo.User" autowire="byName">
<property name="str" value="xiaoyi"/>
</bean>
3.byType
autowire byType (按类型自动装配):根据bean的类型进行装配,当一个bean的属性类型与其他bean的属性的数据类型一致,则自动装配。
<bean id="dog" class="com.pojo.Dog"/>
<bean id="cat" class="com.pojo.Cat"/>
<bean id="user" class="com.pojo.User" autowire="byType">
<property name="str" value="xiaoyi"/>
</bean>
二、注解方式
1.@Autowired == byType (按类型自动装配)
(@Autowired(required=false) 说明:false,对象可以为null;true,对象必须存对象,不能为null。)
1.pojo将User类中的set方法去掉,使用@Autowired注解.
public class User {
private String str;
@Autowired
private Cat cat;
@Autowired
private Dog dog;
public Cat getCat() {return cat;}
public Dog getDog() {return dog;}
public String getStr() {return str;}
}
2、此时配置文件内容
<context:annotation-config/>
<bean id="dog" class="com.kuang.pojo.Dog"/>
<bean id="cat" class="com.kuang.pojo.Cat"/>
<bean id="user" class="com.kuang.pojo.User"/>
2.@Qualifier == byName(按名称自动装配)
1、配置文件修改内容,保证类型存在对象。且名字不为类的默认名字!
<bean id="dog2" class="com.pojo.Dog"/>
<bean id="cat2" class="com.pojo.Cat"/>
2、在属性上添加Qualifier注解
@Qualifier(value = "cat2")
private Cat cat;
@Qualifier(value = "dog2")
private Dog dog;
3.@Resource
使用规则:
- @Resource如有指定的name属性,先按该属性进行byName方式查找装配;
- 其次再进行默认的byName方式进行装配;
- 如果以上都不成功,则按byType的方式自动装配。
- 都不成功,则报异常。
方案一:
1.pojo
public class User {
//如果允许对象为null,设置required = false,默认为true
@Resource(name = "cat2")
private Cat cat;
@Resource
private Dog dog;
private String str;
}
2.xml
<bean id="dog" class="com.pojo.Dog"/>
<bean id="cat1" class="com.pojo.Cat"/>
<bean id="cat2" class="com.pojo.Cat"/>
<bean id="user" class="com.pojo.User"/>
方案二:
@Resource
private Cat cat;
@Resource
private Dog dog;
<bean id="dog" class="com.pojo.Dog"/>
<bean id="cat1" class="com.pojo.Cat"/>
结论:先进行byName查找,失败;再进行byType查找,成功。
以上是关于Spring学习笔记5:bean的装配方式的主要内容,如果未能解决你的问题,请参考以下文章