为什么以下内容不适用于自动装配

时间:2011-05-04 07:47:28

标签: spring

我有一个像

这样的课程
class A {
      @Autowired
      B b;
}

A a = new A()

我发现b未自动装配

我已经<context:component-scan base-package="*">,还有其他什么遗失?

2 个答案:

答案 0 :(得分:4)

您必须从bean工厂获取bean,而不是直接创建实例。

例如,以下是如何使用注释执行此操作。首先,您需要为您的班级声明添加更多内容:

// Annotate to declare this as a bean, not just a POJO
@Component
class A {
    @Autowired
    B b;
}

接下来,每个应用程序执行一次

AnnotationConfigApplicationContext factory =
        new AnnotationConfigApplicationContext();
factory.register(A.class);
factory.register(B.class);
// Plus any other classes to register, or use scan(packages...) method
factory.refresh();

最后,您现在可以获取bean的实例:

// Instead of: new A()
A a = factory.getBean(A.class);

答案 1 :(得分:3)

如果Spring将它实例化为bean,Spring将只会自动装配A对象。如果你实例化自己的,那么Spring对此一无所知,所以没有任何东西可以自动装配。