使用@Autowired将依赖项注入使用“new …”创建的对象中
发布时间:2020-12-14 04:59:46 所属栏目:百科 来源:网络整理
导读:将bean注入helper类时遇到问题.它的工作原理基本上是这样的:我在页面构造函数中创建一个对象,它可以完成一些工作,返回一些数据并在页面上显示这些数据.在此辅助对象中,应通过@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)); } } 助手对象: 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 } } 解决方法
@SpringBean仅将依赖项注入从Wicket的Component继承的类中. @Autowired只将依赖注入Spring自己创建的类中.这意味着您无法自动将依赖项注入到使用new创建的对象中.
(编辑:您还可以通过在构造函数中注入来向您的类添加@SpringBean注入: 我的正常解决方法是使用我的应用程序类来提供帮助. (我对你使用新的Application(…)感到有些困惑.我认为这实际上不是org.apache.wicket.Application.)例如: public class MyApplication extends AuthenticatedWebApplication implements ApplicationContextAware { private ApplicationContext ctx; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ctx = applicationContext; } public static MyApplication get() { return (MyApplication) WebApplication.get(); } public static Object getSpringBean(String bean) { return get().ctx.getBean(bean); } public static <T> T getSpringBean(Class<T> bean) { return get().ctx.getBean(bean); } .... } 在我的Spring应用程序上下文中 <!-- Set up wicket application --> <bean id="wicketApplication" class="uk.co.humboldt.Project.MyApplication"/> 然后我的帮助对象按需查找服务: public class HelperObject { private Service getService() { return MyApplication.getSpringBean(Service.class); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |