2015-02-24 83 views
3

@Autowired註釋如何在沒有getter setter的私人領域中工作? 春天如何進入私人領域?@autowired註釋如何爲私人領域工作?

+0

http://stackoverflow.com/a/17531269/1297272 – Javier 2015-02-24 11:12:09

+1

它是'@ automagic',因爲spring使用反射來實現依賴性連線機制。 – vikingsteve 2015-02-24 11:21:23

+0

不同意這是重複的,因爲這些問題純粹是關於反思。這個問題是要求essentailly爲什麼春季框架在這個機制中使用反射 – vikingsteve 2015-02-24 11:23:24

回答

6

它與reflection一起使用。 Here您可以找到如何設置公共字段的示例。但是,設置私人領域並沒有太大的一個difference

+3

與私人領域的唯一區別在於,您需要先設置'setAccessible',然後才能讀取/寫入該字段。此外,這個方法可以拋出'SecurityException'。 http://docs.oracle.com/javase/8/docs/api/java/lang/reflect/AccessibleObject.html#setAccessible-java.lang.reflect.AccessibleObject:A-boolean- – PeterK 2015-02-24 11:32:03

+0

對,忘了SecurityException,謝謝。 – wastl 2015-02-24 11:32:42

0
@Component 
public class A(){} 

@Component 
public class B(){ 
@Autowired 
private A a; 
} 

Spring創建bean作爲@Component提到。這裏首先創建bean A,並且由於B依賴於A,那麼完成A到B的注入。不需要任何setter。只需@Component是必需的。 Spring使用CGLib來創建使用反射的bean。

-1

三種類型的依賴注入的

至少有三個方面的目標能夠接收到外部模塊的引用:

構造函數注入:依賴關係通過類構造函數提供。

setter injection:客戶端公開了setter方法,注入器使用它來注入依賴關係。

接口注入:依賴項提供了一個注入方法,它將依賴注入到傳遞給它的任何客戶端。客戶端必須實現一個暴露接受依賴關係的setter方法的接口。