Autowired 和 Resource 的区别
@Autowired | @Resource |
---|---|
Spring 定义的注解 | JDK自带的注解(JSR-250定义的) |
默认按类型自动装配(byType) | 默认按名称自动装配(byName) |
一个参数:required(默认true),表示是否必须注入 | 七个参数:最重要的两个参数是 name,type |
默认按类型自动装配,如果要按名称自动装配,需要和 @Qualifier 一起配合 | 默认按名称自动装配,如果指定了 name,则按名称自动装配;如果指定了 type,则按类型自动装配 |
支持优先级,@Primary 注解修饰,该候选者会被选中,作为自动装配的 bean | 不支持 |
作用范围:构造器,方法,参数,成员变量,注解 | 作用范围:类,成员变量,方法 |
不知道从什么时候起我的 IDEA 对 @Autowired 一直报黄色的波浪线,使用 alt + enter 查看 IDEA 给的提示是 Field injection is not recommended,上网查了以下发现其实是因为现在推荐使用构造器的方式注入,而不推荐使用成员变量的方式。我以前的处理方式是直接使用 @Resource,但是今天才明白 @Autowired 的功能略微强大一点。支持优先注入,可以配置允许 bean 不存在;@Resource 相比较于 @Autowired 就是更加通用一点,支持其他框架,但是我现在后端都是在用 Spring,也暂时不用考虑其他框架。整体来说我打算继续使用 @Autowired(后面如何换框架了当我没说),但是继续使用 IDEA 又给我报黄色波浪线,看着很烦,本人有很严重的代码洁癖。所以我打算把 IDEA 的这个警告取消:Settings -> Inspections -> Spring Core -> Non recommended field injections 取消勾选就好了
评论