簡體   English   中英

Spring注釋@Autowired內部方法

[英]Spring annotation @Autowired inside methods

@Autowired可以與構造函數,setter和類變量一起使用。

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

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

    obj.method(param);
  }
}  

如果這是不可能的,還有其他方法可以實現嗎? (我用過Spring 4.)

@Autowired注釋本身用注釋注釋

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

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

即使它可以 ,也沒有任何Spring或任何運行時環境可以做到這一點,因為反射不提供任何掛鈎到方法體。 您將無法在運行時訪問該局部變量。

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

如果您正在尋找的是IoC in method,您可以這樣做:

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: some_spring.Helper@431e34b2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM