Spring注释@Autowired内部方法

Déb*_*ora 10 java spring dependency-injection

@Autowired 可以与构造函数,setter和类变量一起使用.

如何@Autowired在方法或任何其他范围内使用注释.我尝试了以下,但它产生编译错误.例如

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

    obj.method(param);
  }
}  
Run Code Online (Sandbox Code Playgroud)

如果这是不可能的,还有其他方法可以实现吗?(我用过Spring 4.)

Sot*_*lis 27

@Autowired注释本身标注了

@Target({ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
Run Code Online (Sandbox Code Playgroud)

这意味着它只能用于注释构造函数,字段,方法或其他注释类型.它不能用于局部变量.

即使它可以,也没有任何Spring或任何运行时环境可以做到这一点,因为反射不提供任何挂钩到方法体.您将无法在运行时访问该局部变量.

您必须将该局部变量移动到一个字段并自动装配该字段.


小智 6

如果您正在寻找方法中的 IoC,您可以这样做:

Helper2.java班级

public class Helper2 {

    @Autowired
    ApplicationContext appCxt;

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

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

<beans ...>
    <context:annotation-config />
    <bean id="helper" class="some_spring.Helper" />
    <bean id="helper2" class="some_spring.Helper2" />
</beans>
Run Code Online (Sandbox Code Playgroud)

日志输出

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
Run Code Online (Sandbox Code Playgroud)