Spring学习——AutoWire自动注入

在原先的配置文件中,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());
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_34819372/article/details/82557846
今日推荐