两分钟学会自动注入@Resource和@Inject注解

上文系统的介绍了spring自动装配@Autowired注解的使用,没有查看的可以点击查看,@Autowired注解大家使用过,那今天的两个自动注入可能就不是每个同学都有使用过,不信你看

 

今天将从以下几方面来学习一下@Resource和@Inject注解

  • @Resource注解的使用演示

  • @Inject注解的使用演示

  • @Resource和@Inject注解与@Autowired注解的区别

 

 

1,@Resource注解的使用演示

 

把上文中的例子注入修改如下:

 

//    @Qualifier(value="userDao")
//    @Autowired(required=false)
@Resource
private UserDao userDao2;

 

运行测试类结果如下:

 

实例bean为 === UserService [userDao=UserDao [version=2]]

 

让我们@Resource注解中加上一个name参数如下:

 

@Resource(name="userDao")

 

继续运行测试结果如下:

 

实例bean为 === UserService [userDao=UserDao [version=0]]

 

从运行结果我们可以发现:

  • @Resource注解默认根据参数名字寻找bean注入

  • @Resource也可以通过name参数指定需要注入的bean

  • @Resource注解不支持spring的@Primary注解优先注入

 

2,@Inject注解的使用演示

 

在演示@Inject注解前需要先在pom文件中增加如下依赖:

 

<dependency>
           <groupId>javax.injectgroupId>

           <artifactId>javax.injectartifactId>
           <version>1version>
dependency>

 

UserService类UserDao注入修改为如下:

 

@Inject
private UserDao userDao;

 

对应的主配置文件如下:

 

@Primary
@Bean(value = "userDao2")
public UserDao getUserDao(){
       UserDao userDao = new UserDao();
       userDao.setVersion(2);
       return userDao;
}

 

运行测试类结果如下:

 

实例bean为 === UserService [userDao=UserDao [version=2]]

 

UserService类注入代码修改如下:

 

@Named("userDao")
private UserDao userDao;

 

运行测试类结果如下:

 

实例bean为 === UserService [userDao=UserDao [version=0]]

 

从以上运行结果我们可以得出:

  • @Inject注解默认是根据参数名去寻找bean注入

  • @Inject注解支持spring的@Primary注解优先注入

  • @Inject注解可以增加@Named注解指定注入的bean

 

3,@Resource和@Inject注解与@Autowired注解的区别

 

不同点

  1. @Autowired是spring专有注解,@Resource是java中JSR250中的规范,@Inject是java中JSR330中的规范

  2. @Autowired支持参数required=false,@Resource,@Inject都不支持

  3. @Autowired,和@Inject支持@Primary注解优先注入,@Resource不支持

  4. @Autowired通过@Qualifier指定注入特定bean,@Resource可以通过参数name指定注入bean,@Inject需要@Named注解指定注入bean

 

相同点

 

三种注解都可以实现bean的注入

 

以上是今天文章的所有内容,欢迎大家吐槽

 

推荐阅读

 

深入理解spring生命周期与BeanPostProcessor的实现原理

 

250G偷懒必看资料全集

 

更多优质文章请关注以下公众号查阅:

 

你可能感兴趣的:(java,spring,java,spring)