@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;

最后,如果有问题,希望指正,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值