1. 程式人生 > >@recources與@Autowired的繼承注入

@recources與@Autowired的繼承注入

前言

對於一個介面,如果有好幾個類繼承它,注入的時候@recources 與 @Autowired 還是有點區別的

擴充套件知識

springmvc中的@Resource與@Autowired註解的區別

程式碼

interface

package com.cn.artifact.Service;

public interface Human {
    void speak();
}

ManImpl

package com.cn.artifact.Service;

import org.springframework.stereotype.Service;

@Service
public class ManImpl  implements Human{
    @Override
    public
void speak() { System.out.println("ManImpl"); } }

WomenImpl

package com.cn.artifact.Service;

import org.springframework.stereotype.Service;

@Service
public class WomenImpl implements  Human {
    @Override
    public void speak() {
        System.out.println("WomenImpl");
    }
}

使用註解

1) service不在主入口類同一級或者下一級,就不能注入,這應該是springboot的原因

2)

  @Autowired
   private Human human;

   @Resource
   private Human human;

兩種都異常:Human有兩個繼承類
3)

  @Resource(name = "ManImpl")
   private Human human;

大寫該類名,無法注入

4)

  @Resource(name = "manImpl")
  private Human human;

正常,呼叫manImpl類
5)

  @Autowired
  private ManImpl manImpl;

正常,呼叫manImpl類

6)

 @Autowired
 private WomenImpl manImpl;

正常,呼叫WomenImpl類

7)

@Resource(name = "womenImpl")
private WomenImpl manImpl;

正常,呼叫womenImpl類

8)

@Resource(name = "womenImpl")
 private ManImpl manImpl;

異常,不能注入(resource注入的與private 不符合)

總結

1.resource的byName應該是指@service(name=”“)裡的name,當沒有name值時用該類的type,即為類名的首字母小寫
2.resource(name=”“)中的name若與private 的類不符,也會異常
3.與最後 private Human human human的名字無關,可以為private Human aa
4.resource注入若(@resource(name=”“)),而service上有name=”aa”,會用 name 找到相應的類注入