我正在尝试编写一个面向服务的应用程序。
我被称为memory
这样定义:
package com.example.assets;
//imports ignored
@Resource
public class Memory {
}
我有一个服务被memoryHandler
定义为:
package com.example.service;
//imports ignored
@Service
public class MemoryHandler {
@Autowired
private Memory memory;
public void execute() {
//do something with memory
}
}
还有另一个类,它是BeanFactoryPostProcessor
:
package com.example.service;
//imports ignored
@Component
public class PostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
beanFactory.getBeansOfType(MemoryHandler.class, false, true);
}
}
它过早地查找 bean,memoryHandler
使其实例化`但没有自动装配。但是,我希望 bean 在工厂获取之前自动装配。
在我的主要课程中,我写过:
package com.example.service;
//imports ignored
public class Main {
public static void main(String[] args) {
final ApplicationContext context = new ClassPathXmlApplicationContext("/context.xml");
context.getBean(MemoryHandler.class).execute();
}
}
我得到了NullPointerException
一条我使用内存的线路。我用 setter 注入替换了上面的声明,并且在跟踪时意识到注入永远不会发生。
我已将两个组件上的注释更改为Service
, Repository
,Component
并且还尝试替换Autowired
withResource
无济于事。
我在这里想念什么?我已经阅读了在寻找答案时出现的所有问题,但没有一个对我有帮助(我得到了关于在Resouce
那里使用注释的提示)。
不用说,我没有错过我的 bean 的注释配置:
<context:annotation-config/>
<context:component-scan base-package="com.example"/>
此外,当在 XML 配置文件中定义自动装配的 bean 时,自动装配工作得很好,而不是通过注释。
我正在使用 Spring 3.2.3.RELEASE。