在原先的配置文件中,A需要注入B GitHub上springAutoWire的demo
private B b;
我们需要在每个<bean name="A">标签中手动添加注入对象B或属性或方法
<bean name="" class="" autowire="">
autowire自动注入,无需我们手动添加配置
1>autowire="byName" 通过A中调用B的名字来查找xml中是否有<bean name="b" >并与之匹配连接注入
<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-3.0.xsd">
<bean id="A" class="com.spring.autowire.demo.A" autowire="byName">
<property name="str" value="根据A中声明的变量名自动注入"/>
</bean>
<bean id="b" class="com.spring.autowire.demo.B">
</bean>
</beans>
2>autowire="byType" 通过A中调用B的类型来查找xml中是否有<bean name="B" >并与之匹配连接注入
<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-3.0.xsd">
<bean id="A" class="com.spring.autowire.demo.A" autowire="byType">
<property name="str" value="根据A中声明的变量类型自动注入"/>
</bean>
<bean id="B" class="com.spring.autowire.demo.B">
</bean>
</beans>
3>autowire="constructor" 通过A中构造函数的参数(B b,String str)来查找xml中是否有<bean name="B" >并与之匹配连接注入
<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-3.0.xsd">
<bean id="A" class="com.spring.autowire.demo.A">
<!-- 构造函数依赖注入 -->
<constructor-arg ref="b"/>
<constructor-arg value="构造函数自动注入" />
</bean>
<bean id="b" class="com.spring.autowire.demo.B">
</bean>
</beans>
A.java
package com.spring.autowire.demo;
public class A {
private B b;
private String str;
public A(){
}
public A(B b,String str){
this.b=b;
this.str=str;
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
B.java
package com.spring.autowire.demo;
public class B {
public B(){
System.out.println("B的构造函数被调用");
}
public void bSpeack(){
System.out.println("B说话");
}
}
SpringMain.java
package com.spring.autowire.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringMain {
public static void main(String[] args){
System.out.println("------自动注入byName----------");
ApplicationContext context1 = new ClassPathXmlApplicationContext("Beans1.xml");
A a1 = (A) context1.getBean("A");
System.out.println(a1.getStr());
System.out.println("------自动注入byType----------");
ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans2.xml");
A a2 = (A) context2.getBean("A");
System.out.println(a2.getStr());
System.out.println("------自动注入构造函数----------");
ApplicationContext context3 = new ClassPathXmlApplicationContext("Beans3.xml");
A a3 = (A) context3.getBean("A");
System.out.println(a3.getStr());
}
}