2014-09-01 71 views
8

@Autowired可以與構造函數,setter和類變量一起使用。Spring註釋@Autowired內部方法

如何在方法或其他範圍內使用@Autowired註釋?我嘗試了以下,但它會產生編譯錯誤。例如

public classs TestSpring { 
    public void method(String param){ 
    @Autowired 
    MyCustomObjct obj; 

    obj.method(param); 
    } 
} 

如果這是不可能的,是否有其他方法可以實現? (我用彈簧4)

回答

23

@Autowired註釋本身與

@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE}) 

註釋這意味着它只能用於註釋的構造,字段,方法,或其它類型的註釋。它不能用於局部變量。

即使可能,沒有什麼Spring或任何運行時環境可以做,因爲反射不提供任何掛鉤到方法體。您將無法在運行時訪問該局部變量。

您必須將該局部變量移動到某個字段並自動裝入該字段。

1

如果你正在尋找的是國際奧委會的方法,你可以這樣做:

Helper2.java

public class Helper2 { 

    @Autowired 
    ApplicationContext appCxt; 

    public void tryMe() { 
     Helper h = (Helper) appCxt.getBean("helper"); 
     System.out.println("Hello: "+h); 
    } 
} 

spring.xml文件通知<context:annotation-config />

<beans ...> 
    <context:annotation-config /> 
    <bean id="helper" class="some_spring.Helper" /> 
    <bean id="helper2" class="some_spring.Helper2" /> 
</beans> 

日誌輸出

用戶
2017-07-06 01:37:05 DEBUG DefaultListableBeanFactory:249 - Returning cached instance of singleton bean 'helper2' 
2017-07-06 01:37:05 DEBUG DefaultListableBeanFactory:249 - Returning cached instance of singleton bean 'helper' 
Hello: [email protected] 
相關問題