@Autowired日常我们用来修饰成员变量进行依赖注入,但除此之外还有许多用法
@Autowired的用法
- 修饰成员变量进行DI
- 标注在实例方法(或者入参上都可以)
- 标注在setter方法上
- 标注在有参构造方法上
- 标注在有参构造方法入参上,可以省略
标注在实例方法(或者入参上都可以)
当@Autowired注解标注在方法上时,Spring容器在创建对象的时候,就会调用相应的@Autowired修饰的方法。如果标注的方法存在参数时,则方法使用的参数和自定义类型的值,需要从IOC容器中获取。
当我们标注在setter方法中,则可以进行依赖注入
@Autowired修饰testPig(),在实例化Pig的时候,会调用@Autowired修饰的方法,并且会从IOC中找出cat1的实例注入
@Component
public class Pig {
private Cat1 cat1;
public Cat1 getCat1() {
return cat1;
}
public Pig setCat1(Cat1 cat1) {
this.cat1 = cat1;
return this;
}
@Autowired
public void testPig(Cat1 cat1) {
System.out.println("get cat1 name:" + cat1.getName());
System.out.println("execute testPig......");
}
@Override
public String toString() {
System.out.println("execute Pig toString");
return null;
//return cat1.toString();
}
}
标注在有参构造方法上
@Autowired修饰setCat1方法进行依赖注入cat1
@Component
public class Pig {
private Cat1 cat1;
public Cat1 getCat1() {
return cat1;
}
@Autowired
public Pig setCat1(Cat1 cat1) {
System.out.println("execute setCat1......");
this.cat1 = cat1;
return this;
}
@Override
public String toString() {
System.out.println("execute Pig toString");
return null;
//return cat1.toString();
}
}
标注在有参构造方法上
使用@Autowired注解标注在构造方法上时,构造方法中的参数对象也都是从IOC容器中获取的
@Component
public class Pig {
private Cat1 cat1;
public Cat1 getCat1() {
return cat1;
}
@Autowired
public Pig(Cat1 cat1){
this.cat1 = cat1;
System.out.println("调用了Pig的有参构造方法");
}
public Pig setCat1(Cat1 cat1) {
System.out.println("execute setCat1......");
this.cat1 = cat1;
return this;
}
@Override
public String toString() {
System.out.println("execute Pig toString");
return null;
//return cat1.toString();
}
}
标注在有参构造方法入参上,可以省略
如果Spring的bean只有一个有参构造方法,并且这个有参构造方法只有一个参数,并且这个参数是IOC容器中的对象,当@Autowired注解标注在这个构造方法的参数上时,我们可以将@Autowired注解省略。
@Component
public class Pig {
private Cat1 cat1;
public Cat1 getCat1() {
return cat1;
}
public Pig(@Autowired Cat1 cat1){
this.cat1 = cat1;
System.out.println("调用了Pig的有参构造方法");
}
public Pig setCat1(Cat1 cat1) {
System.out.println("execute setCat1......");
this.cat1 = cat1;
return this;
}
/*@Autowired
public void testPig(Cat1 cat1) {
System.out.println("get cat1 name:" + cat1.getName());
System.out.println("execute testPig......");
}*/
@Override
public String toString() {
System.out.println("execute Pig toString");
return null;
//return cat1.toString();
}
}
如何选择