为啥现在都用@Resource,不建议用@Autowired?有啥区别和优势?

2 个回答

  • 路飞
    有些东西不需要答案,态度就是答案。
    Spring对于@Autowired、@Resource注解使用不同的后置处理器进行处理 @Autowired、@Resource之间的处理方式不同,@Autowired是根据类型,@Resource是根据名称 Spring使用AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor类分别处理@Autowired注解和@Resource注解,他们都实现了InstantiationAwareBeanPostProcessor类,所以标注了@Autowired、@Resource会在第六次调用bean的后置处理器的时候完成属性注入。 ![image.png](https://images.codewd.com/8a8c11af07d1047b38766b36582650d3.png) ![image.png](https://images.codewd.com/360fe13e4c722efc81778be3feae3b2e.png)
    编辑于 2022-12-02 21:26 •IP属地 广西
    举报
    评论
    收藏

  • 大小姐
    重新审视自己,什么使你快乐,什么就是眼下最珍贵。
    1.@Autowired功能虽说非常强大,但是也有些不足之处。比如:比如它跟spring强耦合了,如果换成了JFinal等其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。也就是说@Resources按名字,是**jdk**的,@Autowired按类型,是**spring**的。减少了与Spring的耦合。 2.@Autowired 默认是按照byType进行装配的,所以默认情况下依赖的对象必须存在,如果允许为null,则可以使用required属性为false,如果想使用byName进行装配,那么可以和@Qualifier注解相互配合。 @Resource默认是按照byName进行装配的,如果指定了name,则会查找id指定name的bean进行装配,如果指定了type,则会从Spring IOC 中 找到唯一的Bean进行装配,找不到则排除异常。
    发布于 2021-06-17 14:32 •IP属地 天津
    举报
    评论
    收藏