何时使用getAutowireCapableBeanFactory()。autowireBean(someBean)?

时间:2012-02-09 10:00:51

标签: java spring spring-mvc

春天何时使用以下代码?如果包括在线以下会有什么影响?

getAutowireCapableBeanFactory().autowireBean(someBean)

谢谢!

2 个答案:

答案 0 :(得分:3)

一般来说,答案是“从不”。这是一个内部的Spring函数,当你可以自己使用它时,你很可能不应该这样做。

您可以使用它将依赖项自动装配到您自己创建的对象中,但这是一个非常专业的用例,您不需要99.99%的时间。

答案 1 :(得分:0)

我遇到了如下使用场景:

具体来说:我有2个项目,p1和p2。

p1:该项目有一个类A,该类使用@Resource批注将一个bean B自动连接到Spring IOC,而类A的方法f()使用了atuowired bean B。

public class A{
@Resource
B b;
public void action() {
    System.out.println(b == null);
    b.dosth();
    }
}

p2:该项目通过反射调用A的操作方法。

URL url1 = new URL(jarPath); // "file:D:/jarload/test.jar"
URLClassLoader myClassLoader1 = new URLClassLoader(new URL[] { url1 },
Thread.currentThread().getContextClassLoader());
Class<?> myClass1 = myClassLoader1.loadClass(classFullName);
Object obj = myClass1.newInstance();
// this.context.getAutowireCapableBeanFactory().autowireBean(obj); //without this,the b will be null.
Method method = myClass1.getDeclaredMethod("action");
method.invoke(obj);
  1. 通过eclipse将p1导出到jar文件。
  2. 在p2中,运行jar。

希望对您有帮助!