二、@Autowired:自动装配
自动装配,用于替代基于XML配置的自动装配
基于@Autowired的自动装配,默认是根据类型注入,可以用于构造器、字段、方法注入,使用方式如下:
@Autowired(required=true)
构造器、字段、方法
如果允许出现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 则注入进去的list只有一个值,如果使用 ArrayList则注入进来的size有两个值