Joh*_*nak 4 java spring wicket dependency-injection autowired
将bean注入helper类时遇到问题.它的工作原理基本上是这样的:我在页面构造函数中创建一个对象,它可以完成一些工作,返回一些数据并在页面上显示这些数据.在此辅助对象中,应通过@Autowired注释注入服务.但是,当我使用它时,我总是得到一个空指针异常.我也尝试了,@SpringBean但没有帮助.另一方面,当我将此服务直接注入页面时@SpringBean,它可以访问并且工作正常.你知道问题出在哪里吗?
这是页面:
public class Page extends BasePage {
public Page() {
HelperObject object = new HelperObject(new Application("APP_NAME"));
String result = object.getData();
add(new Label("label", result));
}
}
Run Code Online (Sandbox Code Playgroud)
助手对象:
public class HelperObject {
private Application app;
@Autowired
private Service service;
public HelperObject(Application app) {
this.app = app;
}
public String getData() {
// use service, manipulate data, return a string
}
}
Run Code Online (Sandbox Code Playgroud)
您可以@SpringBean通过调用InjectorHolder.getInjector().inject(this);其构造函数将依赖项注入到非Spring-non-Wicket-new-created对象中.
例如:
class MyPojo {
@SpringBean
MyDumbDAO dao;
MyPojo() {
InjectorHolder.getInjector().inject(this);
}
void justDoIt() {
dao.duh(); // dao is there!
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,它仅在Wicket管理的请求中调用时才有效.如果不是(即,如果它是Quartz作业,或者在Wicket之前执行过滤器),则Application实例将不可用,并且注入器将不知道如何获取依赖项.
另一种解决方案是使用Spring @Configurable.它使用AspectJ拦截注释对象的创建,并注入其依赖项,即使您直接使用new(或其他一些框架,如Hibernate,在内部创建它们)实例化它们.但这需要运行时或构建时间(对我来说更好)字节码操作,这对某些人来说可能太神奇了.
| 归档时间: |
|
| 查看次数: |
9459 次 |
| 最近记录: |