• @Autowired和@Resource的区别是什么?


    1.@Autowired装配方式:

    ,这样是能够装配成功的,因为默认情况下spring是按照类型装配的,也就是我们所说的byType方式。此外,@Autowired注解的required参数默认是true,表示开启自动装配,有些时候我们不想使用自动装配功能,可以将该参数设置成false。

    2.@Autowired装配命名规则:

    spring的@Service方法不允许出现相同的类名,因为spring会将类名的第一个字母转换成小写,作为bean的名称,比如:testService1,而默认情况下bean名称必须是唯一的。

    产生两个相同bean的情况:

    public class TestService1 {
    
        public void test1() {
        }
    }
    
    @Service
    public class TestService2 {
    
        @Autowired
        private TestService1 testService1;
    
        public void test2() {
        }
    }
    
    @Configuration
    public class TestConfig {
    
        @Bean("test1")
        public TestService1 test1() {
            return new TestService1();
        }
    
        @Bean("test2")
        public TestService1 test2() {
            return new TestService1();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    4.如何解决Autowired注入相同类型实例名字冲突的问题?

    显然在spring中,按照Autowired默认的装配方式:byType,是无法解决上面的问题的,这时可以改用按名称装配:byName。

    只需在代码上加上@Qualifier注解即可:

    @Service
    public class UserService {
        @Autowired
        @Qualifier("user1")
        private IUser user;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Qualifier意思是合格者,一般跟Autowired配合使用,需要指定一个bean的名称,通过bean名称就能找到需要装配的bean。

    5.@Autowired和@Resource的区别是什么?

    @Autowired功能虽说非常强大,但是也有些不足之处。比如:比如它跟spring强耦合了,如果换成了JFinal等其他框架,功能就会失效。而@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。

    除此之外,有些场景使用@Autowired无法满足的要求,改成@Resource却能解决问题。接下来,我们重点看看@Autowired和@Resource的区别。

    • @Autowired默认按byType自动装配,而@Resource默认byName自动装配。
    • @Autowired只包含一个参数:required,表示是否开启自动准入,默认是true。而@Resource包含七个参数,其中最重要的两个参数是:name 和 type。
    • @Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,则用byName自动装配,如果指定了type,则用byType自动装配。
    • @Autowired能够用在:构造器、方法、参数、成员变量和注解上,而@Resource能用在:类、成员变量和方法上。
    • @Autowired是spring定义的注解,而@Resource是JSR-250定义的注解。

    此外,它们的装配顺序不同

    最后

    深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

  • 相关阅读:
    leetcode896:单调数列
    与MySQL的纠缠(卸载与安装)
    【Android】浅记图片加载框架 -- Glide
    被迫开始学习Typescript —— vue3的 props 与 interface
    java url编码 解码
    决策树模型(2)特征选择
    深度分析React源码中的合成事件
    JavaScript 通过对键的引用获取对象的值
    APP渗透测试
    mysql基础(4)
  • 原文地址:https://blog.csdn.net/m0_54853420/article/details/126801620