Bean的自动装配
在Spring框架里面是使用set方法和构造方法进行注入的,但是bean对象多了以后这样的注入工作就显得麻烦,还有就是xml文件也会变得很大很杂乱,所以为了简化xml配置文件,提高开发效率我们可以使用autowire(自动装配)
自动装配的优点:
自动装配可以大大地减少属性和构造器参数的指派。
自动装配也可以在解析对象时更新配置。
缺点:
重写的可能性:可以使用总是重写自动装配的constructor-arg和property设置来指定依赖关系。
原始数据类型:不能自动装配型。
混乱的本质:自动装配不如显示装配精确,所以如果可能的话尽可能使用显示装配
自动装配的几种方式
- byName按照属性名称自动装配
play.代码
public class Play { private User user; private String name; public void setUser(User user) { this.user = user; } public void setName(String name) { this.name = name; } public String getName() { return name; } public User getUser() { return user; } public void show() { user.play(); } } |
Play的依赖文件user
public class User { public User() { System.out.println("create User"); } public void play() { System.out.println("this User.play()"); } } |
Test
public static void main(String[] args) { // ApplicationContext context=new ClassPathXmlApplicationContext("Beans.xml");
Play play=(Play)context.getBean("play"); play.show();
} |
Xml配置
<!-- 使用autowire byName 自动装配 --> <bean id="play" class="com.user.Play" autowire="byName"> <property name="name" value="tom"></property> </bean> <bean id="user" class="com.user.User"></bean> |
2.byType按属性类型自动装配
代码play与play的依赖文件以及测试文件同上
Xml代码
<!-- 使用autowire byType 自动装配 --> <bean id="play" class="com.user.Play" autowire="byType"> <!-- 此处没有指定user的value 此处spring会自动装配beans中一个属性相匹配的bean --> <!-- 正常的注入应该是<property name="user" ref="user"/> --> <!-- 使用自动装配就可以将这里的priperty省略 --> <property name="name" value="tom"></property> </bean> <bean id="user" class="com.user.User" ></bean> |
- 由构造函数自动装配
Play
public class Play { private User user; private String name;
public Play(User user, String name) { this.user = user; this.name = name; } public String getName() { return name; } public User getUser() { return user; } public void show() { user.play(); } |
Play依赖类不变
Xml配置 autowire设置成constructor
<bean id="play" class="com.user.Play" autowire="constructor" > <constructor-arg value="tom"></constructor-arg> </bean>
<bean id="user" class="com.user.User" ></bean> |