Spring 注解实现Bean依赖注入之@Autowired

二、@Autowired:自动装配

自动装配,用于替代基于XML配置的自动装配

基于@Autowired的自动装配,默认是根据类型注入,可以用于构造器、字段、方法注入,使用方式如下:

@Autowired(required=true)  
构造器、字段、方法  

@Autowired默认是根据参数类型进行自动装配,且必须有一个Bean候选者注入,

如果允许出现0个Bean候选者需要设置属性“required=false”,“required”属性含义和@Required一样,

只是@Required只适用于基于XML配置的setter注入方式。

(1)、构造器注入:通过将@Autowired注解放在构造器上来完成构造器注入,默认构造器参数通过类型自动装配,如下所示:

1、准备测试Bean,在构造器上添加@AutoWired注解:

package com.bean;

import org.springframework.beans.factory.annotation.Autowired;

public class TestBean {

	private String message;
	
	@Autowired
	private TestBean(String message){
		this.message = message;
	}
	
	public String getMessage() {
		return message;
	}
}

2、在Spring配置文件添加如下Bean配置:


	



	

3、测试类如下:

@Test
public void autowiredTest(){
	TestBean bean = ctx.getBean("testBean", TestBean.class);
	Assert.isTrue("hello".equals(bean.getMessage()), "返回不相等");
}

在Spring配置文件中没有对“testBean11”进行构造器注入和setter注入配置,而是通过在构造器上添加@ Autowired来完成根据参数类型完成构造器注入。


(2)、字段注入:通过将@Autowired注解放在构造器上来完成字段注入。

1、准备测试Bean,在字段上添加@AutoWired注解:

package com.bean;

import org.springframework.beans.factory.annotation.Autowired;

public class TestBean {

	@Autowired
	private String message;
	
	public String getMessage() {
		return message;
	}
}

2、在Spring配置文件(chapter12/dependecyInjectWithAnnotation.xml)添加如下Bean配置:




	
	

3、测试方法如下:

@Test  
public void testAutowiredForField() {  
    TestBean bean = ctx.getBean("testBean", TestBean.class); 
    Assert.isTrue("hello".equals(bean.getMessage()),"返回不相等");
}  

字段注入在基于XML配置中无相应概念,字段注入不支持静态类型字段的注入。
这样写的话,则要添加 进行扫描,否则不会注入成功,同时别忘记添加



(3)、方法参数注入:通过将@Autowired注解放在方法上来完成方法参数注入。

1、准备测试Bean,在方法上添加@AutoWired注解:

package com.bean;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

public class TestBean {


	private String message;
	
	private List list;
	
	@Autowired(required = true)
	private void initMessage(String message,List list){
		this.message = message;
		this.list = list;
	}


	@Override
	public String toString() {
		return "TestBean [message=" + message + ", list=" + list + "]";
	}
}


2、在Spring配置文件 添加如下Bean配置:


	  

	
	





	
		
		
	



3、测试方法如下:

@Test  
public void autowiredTest(){
	TestBean bean = ctx.getBean("testBean", TestBean.class);
	System.out.println(bean);
}

同样别忘记了 添加
方法参数注入除了支持setter方法注入,还支持1个或多个参数的普通方法注入,在基于XML配置中不支持1个或多个参数的普通方法注入,方法注入不支持静态类型方法的注入。
 
注意“initMessage(String message, ArrayList list)”方法签名中为什么使用ArrayList而不是List呢?
--如果使用 List 则注入进去的list只有一个值,如果使用 ArrayList则注入进来的size有两个值

你可能感兴趣的:(Spring)