使用注解方式实现Spring IoC
两类自动装配注解
分类 | 注解 | 说明 |
---|---|---|
按类型装配 | @Autowired | 按容器内对象类型动态注入属性,由Spring机构提供 |
@Inject | 基于JSR-330(Dependency Injection for java)标准,其他同@Autowired,但不支持required属性 | |
按名称装配 | @Named | 与@Inject配合使用,JSR-330规范,按属性名自动装配属性 |
@Resource | 基于JSR-250规范,优先按名称、再按类型智能匹配 |
15-@Resource注解按名称装配
@Resource装配规则
- @Resource设置name属性,则按name在IoC容器中将bean注入
- @Resource未设置name属性
2.1 以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入
2.2 按属性名未匹配,则按类型进行匹配,同@Autowired,需加入@Primary解决类型冲突
使用建议
在使用@Resource对象时推荐设置name或保证属性名与bean名称一致
package com.torey.spring.ioc.service;
import com.torey.spring.ioc.dao.IUserDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Author http://torey611.gitee.io/li-tao-feng/
* @Email torey6061@qq.com
* @Date 2021/5/1 7:27
* @描述:
*/
@Service
public class DepartmentService {
/**
* 1. @Resource设置name属性,则按name在IoC容器中将bean注入
* 2. @Resource未设置name属性
* 2.1 以属性名作为bean name在IoC容器中匹配bean,如有匹配则注入
* 2.2 按属性名未匹配,则按类型进行匹配,同@Autowired,需加入@Primary解决类型冲突
* 使用建议:在使用@Resource对象时推荐设置name或保证属性名与bean名称一致
*/
// @Resource
// private IUserDao userDao;
// @Resource
// private IUserDao userOracleDao;
@Resource(name = "userOracleDao")
private IUserDao userDao;
public void getById(Long id){
System.out.println(this.getClass().getName() + ".getById()");
userDao.getById(id);
}
}
按属性注入时,字段是private,是如何赋值的
@Resource(name = "userOracleDao")
private IUserDao userDao;
或者
@Autowired
private IUserDao userDao;
答:IoC反射给属性赋值时,会先将private修改成public,赋值完毕后,再public将修改成private
导航,上一页,下一页
14自动装配与Autowired
16Resource和Autowired注解的区别