laz*_*wiz 4 spring abstract-class autowired
我有一个项目,我有一个接口,一个实现相同接口的Abstract类,然后是一组实现此接口并扩展Abstract类的具体类.
public interface Invoice
{
void process();
}
@component
public abstract class AbstractInvoice(){
@Resource
protected Writer writer;
protected validateInvoice(){
//some implementation
}
}
@Component
public Class TypeAInvoice() extends AbstractInvoice implements Invoice{
@Override
public void process(){
//... some code
writer.write();
}
}
public Interface Writer(){
public void write();
}
@Component
public class CDWriter implements Writer{
@Override
public void write() { /* implementation.....*/}
}
Run Code Online (Sandbox Code Playgroud)
Spring文件包含组件扫描.
<context:annotation-config>
<context:component-scan base-package="com.xyz" />
Run Code Online (Sandbox Code Playgroud)
我正在使用工厂来获取TypeAInvoice发票实例现在调用时invoice.process()会获得NPEwrite.write()
我不知道我在这里错过了什么.我试图查看组件扫描和范围,但在概念上找不到任何错误.
我正在使用工厂获取TypeAInvoice发票的实例
根据您的工厂的不同,这可能是问题所在.如果工厂创建新的TypeAInvoice,则不适用弹簧接线.您必须查询Bean的Spring上下文.一种方法(虽然不是很漂亮)是使用ContextLoader:
return ContextLoader.getCurrentWebApplicationContext().getBean(TypeAInvoice.class)
Run Code Online (Sandbox Code Playgroud)
我会说静态工厂和春天不能很好地融合在一起.Spring代表控制反转模式,而工厂代表服务定位模式.我建议你摆脱你的工厂并自动装配你的春豆.
| 归档时间: |
|
| 查看次数: |
7457 次 |
| 最近记录: |