弹簧注释@Autowired内部方法

2022-09-02 19:54:01

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

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

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

    obj.method(param);
  }
}  

如果这是不可能的,有没有其他方法可以实现?(我用了Spring 4。


答案 1

注释本身带有注释@Autowired

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

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

即使它可以,Spring或任何运行时环境也无法对此做任何事情,因为反射不会为方法主体提供任何钩子。您将无法在运行时访问该局部变量。

您必须将该局部变量移动到字段并自动连接该字段。


答案 2

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

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

推荐