这是我参与2022首次更文挑战的第20天,活动详情查看2022首次更文挑战
字段注入
其实字段注入有一些缺点:
- 使用字段注入可容易添加依赖项,不要违反单一责任原则,拥有更多的依赖项意味着担负更多的责任。这可能在重构时出现难以分离的问题。当使用构造函数或setter设置依赖项时,可容易看出类变得臃肿。但是当使用字段注入时却难看出来。
- 注入依赖项的责任在Spring中由容器承担,但类应该通过方法或构造函数传达使用公共接口所需的依赖项类型。而如果使用字段注入,则可能很难搞清楚什么类型的依赖项是真正需要的,以及依赖项是不是强制性的。
- 字段注入引入了Spring容器的依赖项,因为@Autowired注解是Spring组件,因此这个Bean不再是一个POJO,并且不能独立实例化。
- 字段注入不能用于final字段,这种类型的字段只能使用构造函数注入来初始化。
- 由于必须手动注入依赖项,因此在编写测试时,字段注入带来困难。
使用注入参数
Spring支持多种注入参数选项,不仅可注入其他组件和简单值,还可以注入Java集合、外部定义的属性以及其他工厂中的bean。通过分别使用和标记下的相应标记,可将这些注入参数类型用于setter注入和构造函数注入。
注入简单值
只需要在配置标记中指定值,并将其包含在标记内即可。默认情况下,标记不仅可以读取String值,还可以将这些值转换为任何原始值或原始值包装类。bean具有多种用于注入的属性代码如下:
public class InjectSimple{
private String name;
private int age;
private float height;
private boolean programmer;
private Long ageInSeconds;
public static void main(String... args){
GenericXmlApplicationContext ctx=new GenericXmlApplicationContext();
ctx.load("classpath:spring/app-context-xml.xml");
ctx.refresh();
InjectSimple injectSimple=ctx.getBean("injectSimple");
System.out.println(injectSimple);
ctx.close();
}
public void setAgeInSeconds(Long ageInSeconds){
this.ageInSeconds=ageInSeconds;
}
public void setProgrammer(boolean programmer){
this.programmer=programmer;
}
public void setAge(int age){
this.age=age;
}
public void setHeight(float height){
this.height=height;
}
public void setName(String name){
this.name=name;
}
public String toString(){
return "Name:"+name+"\n"+
"Age:"+age+"\n"+
"Age in Seconds:"+ageInSeconds+"\n“+
"Height:"+height+"\n"+
"Is Programmer?:"+programmer;
}
}