@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时,就会抛出
resource和autowired注解的区别
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;
最后,如果有问题,希望指正,⼀起进步。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。