Java依赖注入的三种方式
- 格式:pdf
- 大小:67.83 KB
- 文档页数:2
Java依赖注⼊的三种⽅式
Spring通过DI(依赖注⼊)实现IOC(控制反转),常⽤的注⼊⽅式主要有三种:构造⽅法注⼊,setter注⼊,基于注解的注⼊。
构造⽅法注⼊
构造器注⼊:保证了⼀些必要的属性在Bean实例化时就设置,并且确保了bean实例在实例化后就可以使⽤.
1.在类中,不⽤为属性设置setter⽅法,只需提供构造⽅法即可
2.在构造⽂件中配置该类bean,并配置构造器,在配置构造器中⽤
//ApplicationContext.xml
提供构造⽅法
public class UserAction {
private String name;
public UserAction(String name) {
this.name = name;
}
}
setter注⼊
1.根据property标签的name属性的值去找对应的setter⽅法.
例如: name= “aa” 对应的就是setAa⽅法.
2.由于属性注⼊具有可选性和灵活性⾼的优点,是实际上最常⽤的注⼊⽅式.
3.属性注⼊要求bean提供⼀个默认的构造函数,并为需要注⼊的属性提供对应的setter⽅法.spring先调⽤bean默认的构造函数实例化bean对
象,然后通过反射机制的⽅法调⽤setter⽅法注⼊属性值.
4.还有⼀点需要注意:如果通过set⽅法注⼊属性,那么spring会通过默认的空参构造⽅法来实例化对象,所以如果在类中写了⼀个带有参
数的构造⽅法,⼀定要把空参数的构造⽅法写上,否则spring没有办法实例化对象,导致报错。
//ApplicationContext.xml
提供setting⽅法
public class UserAction {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
注解注⼊
@Autowired(构造,接⼝,⽅法)
⾃动装配,默认根据类型注⼊
—属性Required
1.@Autowired(required=true):当使⽤@Autowired注解的时候,其实默认就是@Autowired(required=true),表⽰注⼊的时候,该bean必
须存在,否则就会注⼊失败
2.@Autowired(required=false):表⽰忽略当前要注⼊的bean,如果有直接注⼊,没有跳过,不会报错。
3.required属性含义和@Required⼀样,只是@Required只适⽤于基于XML配置的setter注⼊⽅式,只能打在setting⽅法上。
public class AutowiredAction {
private String name;
private List
@Autowired
private AutowiredAction(String name) {
this.name=name;
}
public String getName() { return name;
}
@Autowired
public void setName(String name) {
this.name = name;
}
@Autowired(required = true)
private void initName(String name,List
this.name = name;
this.list = list;
}
}
接⼝
public interface AutowiredIn {
@Autowired
void initName(String name,Integer age);
}
@Resource 默认按照名称装配
可以标注在字段或属性的setter⽅法上。默认按照字段的名称去Spring容器中找依赖对象,如果没有找到,退回到按照类型查找
如果配置了属性name
那么只能按照名称找依赖对象
public class ResourceAction {
@Resource(name="name")
private String name;
@Resource
private List
public String getName() {
return name;
}
@Resource
public void setName(String name) {
this.name = name;
}
public List
return list;
}
public void setList(List
this.list = list;
}
}