spring笔记——bean自动装配的5种模式(autowrite属性)

在应用中,我们常常使用标签为JavaBean注入它依赖的对象。但是对于一个大型的系统,这个操作将会耗费我们大量的资源,自动装配可以指定给每一个单独的bean,因此可以给一些Bean使用自动装配而其它的不使用自动装配。从而节省一些属性设定作。使用bean元素的autowire属性来指定Bean定义的自动装配,共有5中模式:
1:no   默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean
2:byName   通过参数名 自动装配,如果一个bean的name 和另外一个bean的 property 相同,就自动装配。
3:byType   通过参数的数据类型自动自动装配,如果一个bean的数据类型和另外一个bean的property属性的数据类型兼容,就自动装配
4:construct   构造方法中的参数通过byType的形式,自动装配。

5:default 由上级标签的default-autowire属性确定。

①byName,通过bean的属性名称自动装,在spring的配置文档Xml中查找将要装配的属性名称一样的bean示例:


 

 


public class Mege {
	public void say() {
		System.out.println("hello world!");
	}
}

package com.st.sig;



public class Single{
	
	private String name ;
	
	private Mege mege;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Mege getMege() {
		return mege;
	}

	public void setMege(Mege mege) {
		this.mege = mege;
	}
	
}

	public void testac() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		Single s = ac.getBean(Single.class);
		System.out.println(s.getName());
		s.getMege().say();
	}



②byType, 在spring的配置文档Xml中查找将要装配的属性类型一样的bean

将上面byName的配置文件改为

  
 

 
③constructor,根据构造函数的参数自动匹配

  
 
 

package com.st.sig;

import java.util.Date;

public class Single{
	
	private String name ;
	
	private Date date;
	
	private Single(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}
	
}

④no,必须通过手工设置ref 属性来进行装配bean

  
 
 

package com.st.sig;

import java.util.Date;

public class Single{
	
	private String name ;
	
	private Date date;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Date getDate() {
		return date;
	}

	public void setDate(Date date) {
		this.date = date;
	}
	
}

public void testac() {
		ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
		Single s = ac.getBean(Single.class);
		System.out.println(s.getName());
	
	}
⑤default ,根据beans中的default-autowire属性值确定

     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context"  
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byType">   


 
 
 

 


在bean配置文件中设置autowire属性进行的自动装配将装配一个bean的所有属性。这样的灵活性不足以仅仅装配特定的属性,而且,你只能通过类型或者名称自动装配bean,如果这两种策略都不能满足你的要求,就必须明确的装配bean,从spring2.5开始,可以通过@Autowired或者@Resource注解一个设置方法,构造函数,字段甚至任何方法装配特定的属性,但是只能使用Java1.5或者更高的版本。@autowired是通过类型注入的,如果IoC容器中有超过一个类型容器的bean时,spring允许指定一个候选bean,这个bean的名称在@qualifier中提供,而@Resource是通过名称注入的



你可能感兴趣的:(spring)