美文网首页
Spring 中的 @Resource、@Autowired 和

Spring 中的 @Resource、@Autowired 和

作者: changhr2013 | 来源:发表于2018-08-01 17:10 被阅读0次

    Spring 中什么时候用 @Resource,什么时候用 @service

    当你需要定义某个类为一个 bean,则在这个类的类名前一行使用 @Service("myBean"),就相当于将这个类定义为一个 bean,bean 名称为 myBean。

    当需要在某个类中定义一个属性,并且该属性是一个已存在的 bean,要为该属性赋值或注入时在该属性上一行使用 @Resource(name="xxx"),相当于为该属性注入一个名称为 xxx 的 bean。

    Spring 不但支持自己定义的 @Autowired 注解,还支持几个由 JSR-250 规范定义的注解,它们分别是:

    • @Resource
    • @PostConstruct
    • @PreDestroy

    @Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,而 @Resource 默认按 byName 自动注入罢了。
    @Resource 有两个属性是比较重要的,分是 name 和 type,Spring 将 @Resource 注解的 name 属性解析为 bean 的名字,而 type 属性则解析为 bean 的类型。
    所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。

    @Resource 装配顺序

    1. 如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常。
    2. 如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。
    3. 如果指定了 type,则从上下文中找到类型匹配的唯一 bean 进行装配,找不到或者找到多个,都会抛出异常。
    4. 如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

    相关文章

      网友评论

          本文标题:Spring 中的 @Resource、@Autowired 和

          本文链接:https://www.haomeiwen.com/subject/wyurvftx.html