@Autowired和@Resource注解用法详细讲解
Posted 奔跑的路奇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@Autowired和@Resource注解用法详细讲解相关的知识,希望对你有一定的参考价值。
@Autowired和@Resource的用法区别
先看代码
1:定义一个dao层的接口类
public interface UserDao {
void insertUser(SysUser user);
}
2:定义两个dao层接口的实现类
@Repository("oracleDao") //@Repository:dao层的注解
public class OracleDaoImpl implements UserDao {
@Override
public void insertUser(SysUser user) {
System.out.println("user插入到Oracle数据库");
}
}
@Repository("mysqlDao")
public class UserDaoImpl implements UserDao {
@Override
public void insertUser(SysUser user) {
System.out.println("user插入到mysql数据库");
}
}
3:定义一个service的接口类
public interface UserService {
void addUser(SysUser user);
}
4:定义一个service接口的实现类
@Service //@Service:业务层注解
public class UserServiceImpl implements UserService {
/**使用注解方式:
* 1:因为有两个UserDao的实现接口,所以如果要使用注解@Autowired,必须要加上@Qualifier注解。(如果dao只有一个实现类,那么就可以就使用@Autowired)
* 2:但也可以只使用一个注解:@Resource(name="mysqlDao或oracleDao")
*/
@Autowired //默认byType
@Qualifier("mysqlDao") //byName按名称注入
// @Qualifier("oracleDao")
private UserDao dao;
// @Resource(name="oracleDao")//byName按名称注入
// @Resource(type = UserDaoImpl.class)//按类型注入
// private UserDao dao;
@Override
public void addUser(SysUser user) {
//调用dao的方法;
dao.insertUser(user);
}
}
总结
@Autowired
byType自动注入@Autowired
- 需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式。
- @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false
byName自动注入@Autowired和@Qualifier
- 需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用于指定要匹配的 Bean 的 id 值。
- @Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛BeanCreationException异常。可以使用@Qualifier配合@Autowired来解决这些问题。
@Resource
- @Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定
- Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
// @Resource(name="oracleDao")//byName按名称注入
// @Resource(type = UserDaoImpl.class)//按类型注入
// private UserDao dao;
最后,如果有问题,希望指正,一起进步。
以上是关于@Autowired和@Resource注解用法详细讲解的主要内容,如果未能解决你的问题,请参考以下文章
Spring IOC容器注解 @Autowired@Resource@Primary@Value的用法
Spring中@Resource与@Autowired@Qualifier的用法与区别