@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注解用法详细讲解的主要内容,如果未能解决你的问题,请参考以下文章

@Autowired和@Resource注解用法详细讲解

Spring IOC容器注解 @Autowired@Resource@Primary@Value的用法

@Autowired 与@Resource的区别

Spring中@Resource与@Autowired@Qualifier的用法与区别

Spring中@Resource与@Autowired@Qualifier的用法与区别

Spring中@Resource与@Autowired@Qualifier的用法与区别