@recources與@Autowired的繼承注入
阿新 • • 發佈:2018-12-17
前言
對於一個介面,如果有好幾個類繼承它,注入的時候@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 找到相應的類注入