staticApplicationContext中的autowire bean

Mar*_*ios 2 java spring autowired

我试图在StaticApplicationContext中自动装配一个bean但是虽然我可以插入一个bean并成功检索它,但我无法在另一个bean中自动装配它.下面是一个简单的例子来解释我的意思.

在此示例中,第一个断言成功,第二个断言失败.请注意,如果我注释掉此方法的行,而是取消注释使用AnnotationConfigApplicationContext的方法#2的行,则自动装配将起作用.但是,我想使用StaticApplicationContext方法来完成这项工作.

@Test
public void testAutowire() {

    //context configuration approach #1
    StaticApplicationContext context = new StaticApplicationContext();
    context.registerSingleton("child", Child.class);

    //context configuration approach #2
    //AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Child.class);

    Parent parent = new Parent();

    context.getAutowireCapableBeanFactory().autowireBean(parent);

    //this is successful
    Assert.notNull(context.getBean(Child.class), "no bean found");
    //this works only with AnnotationConfigApplicationContext and not with StaticApplicationContext
    Assert.notNull(parent.child, "no child autowired");
}

public static class Parent {

    @Autowired
    Child child;

    public Parent() {

    }
}

public static class Child {

    public Child() {
    }
}
Run Code Online (Sandbox Code Playgroud)

问题所在的任何想法?

Sot*_*lis 8

AnnotationConfigApplicationContext在内部注册一个AutowiredAnnotationBeanPostProcessorbean来处理@Autowired注释.StaticApplicationContext才不是.

你可以自己添加它

context.registerSingleton("someName", AutowiredAnnotationBeanPostProcessor.class);
Run Code Online (Sandbox Code Playgroud)

但你需要refreshApplicationContext

context.refresh();
Run Code Online (Sandbox Code Playgroud)