当前位置 : 主页 > 手机开发 > 其它 >

使用@Autowired将依赖项注入使用“new …”创建的对象中

来源:互联网 收集:自由互联 发布时间:2021-06-22
将bean注入helper类时遇到问题.它的工作原理基本上是这样的:我在页面构造函数中创建一个对象,它可以完成一些工作,返回一些数据并在页面上显示这些数据.在此辅助对象中,应通过@Au
将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注入:
InjectorHolder.getInjector()注入(本);)

我的正常解决方法是使用我的应用程序类来提供帮助. (我对你使用新的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);
    }
网友评论