上文系统的介绍了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.inject</groupId>
? ? ? ? ? ?<artifactId>javax.inject</artifactId>
? ? ? ? ? ?<version>1</version>
</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注解的区别
?
不同点
@Autowired是spring专有注解,@Resource是java中JSR250中的规范,@Inject是java中JSR330中的规范
@Autowired支持参数required=false,@Resource,@Inject都不支持
@Autowired,和@Inject支持@Primary注解优先注入,@Resource不支持
@Autowired通过@Qualifier指定注入特定bean,@Resource可以通过参数name指定注入bean,@Inject需要@Named注解指定注入bean
?
相同点
?
三种注解都可以实现bean的注入
?
以上是今天文章的所有内容,欢迎大家吐槽
?
推荐阅读
?
?
250G偷懒必看资料全集
?
更多优质文章请关注以下公众号查阅:
?