spring容器注入的三种方法
构造方法注入,setter方法注入,注解注入
注解注入:@Autowired
如果只有一个有参数的构造方法并且参数类型与注入的bean的类型匹配,那就会注入到该构造方法中。
在介绍注解注入的方式前,先简单了解bean的一个属性autowire,autowire主要有三个属性值:constructor,byName,byType。
constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。
byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。
byType:查找所有的set方法,将符合符合参数类型的bean注入。
对象构造方法注入
```bash
private final ArticleDao articleDao;
private final IdWorker idWorker;
@Autowired
public ArticleService(ArticleDao articleDao,IdWorker idWorker){
this.articleDao=articleDao;
this.idWorker=idWorker;
}
```
通过set方法注入
```cpp
private ArticleDao articleDao;
private IdWorker idWorker;
@Autowired
public void setArticleDao(ArticleDao articleDao){
this.articleDao=articleDao;
}
@Autowired
public void setIdWorker(IdWorker idWorker){
this.idWorker=idWorker;
}
```
主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:
@Component:可以用于注册所有bean
@Repository:主要用于注册dao层的bean
@Controller:主要用于注册控制层的bean
@Service:主要用于注册服务层的bean