自动装配基本介绍
前面我们已经学习了通过bean元素来声明bean,和XML配置文件中constructor-arg和property元素来注入bean,其实Spring容器可以在不使用注入和bean元素的情况下自动装配相互协作的bean之间的关系,这有助于减少编写一个大的基于Spring的应用程序的XML配置的数量。
自动装配的模式
用于指示spring容器为来使用自动装配进行依赖注入。使用bean元素的autowire属性为一个bean定义指定自动装配模式。
自动装配的局限性
- 重写的可能性:可以使用总是重写自动装配的constructor-arg和property设置来指定依赖关系。
- 原始数据类型:不能自动装配型。
- 混乱的本质:自动装配不如显示装配精确,所以如果可能的话尽可能使用显示装配。
PoJoAuto.java
package com.anzhuo.cm;
public class PoJoAuto {
//给实现属性数据类型自动装配封装属性
/* private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}*/
//实现属性名自动装配
public void PoJoAuto(){
System.out.println("spring自动装配");
}
}
ContextZp.java
package com.anzhuo.cm;
public class ContextZP {
//实现autowire=“byType”属性数据类型自动装配
/*private PoJoAuto pa;
public PoJoAuto getPa() {
return pa;
}
public void setPa(PoJoAuto pa) {
this.pa = pa;
}
public void ContextZP(){
System.out.println("你猜我"+pa.getName());
}*/
//实现spring自动装配的autowire的byName模式
private PoJoAuto pa;
public PoJoAuto getPa() {
return pa;
}
public void setPa(PoJoAuto pa) {
this.pa = pa;
}
public void ContextZp(){
pa.PoJoAuto();
}
}
Spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">
<!-- 实现使用autowire自动装配中的byType模式:由属性数据类型自动装配 -->
<!-- <bean id="pojo" class="com.anzhuo.cm.PoJoAuto">
<property name="name" value="我们今天学习了自动装配"></property>
</bean>
<bean id="context" class="com.anzhuo.cm.ContextZP" autowire="byType">
</bean> -->
<!-- 实现spring自动装配的autowire的byName模式 ,既然是以名字来装配,说以PoJoAuto的ID要与ContextZp里面的类类型的名字保持一致-->
<bean id="pa" class="com.anzhuo.cm.PoJoAuto"></bean>
<bean id="context" class="com.anzhuo.cm.ContextZP" autowire="byName">
</bean>
</beans>
Test.java
package com.anzhuo.cm;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//实现autowrie自动装配中的byType模式,测试它是否装配成功
/* ApplicationContext ac = new ClassPathXmlApplicationContext("Spring.xml");
ContextZP cz = (ContextZP) ac.getBean("context");
cz.ContextZP();*/
ApplicationContext ac= new ClassPathXmlApplicationContext("Spring.xml");
ContextZP cz = (ContextZP) ac.getBean("context");
cz.ContextZp();
}
}
这个要自己多试,要多练