0

我想实现一个DynamicImageResource将安装在 Wicket 6.7/Spring 3.2/JPA 2 应用程序中的。这DynamicImageResource将根据输入参数检索信息并创建响应。

问题是:我如何从内部访问数据库DynamicImageResource.getImageData(...)?我无法enter code here通过@SpringBean. 我最后的手段是静态 PersistenceContextFactory。

有更好的想法吗?还是最佳实践?

4

2 回答 2

4

由于 Wicket 为您管理组件实例化,或者您通过它们各自的构造函数手动实例化对象,因此注入机制无法开箱即用(根据手动构造函数调用,该对象不受容器管理)。

Wicket 通过继承为组件提供内置注入,背后的魔力是 Wicket 调用componentInstanciationListeners。对于不是从启用注入的类继承的每个非托管类,您必须手动触发 bean 上的注入。

如评论中所述,您应该调用Injector.get().inject(this);构造函数以使其正常工作。

于 2013-04-21T10:02:42.360 回答
1

为了完成整个事情,我将PersistenceContextBridge在这里通过我的 Spring bean。它包装了一个EntityManager,它将通过 注入@PersistenceContext。通过使用 Lombok 注释@Delegate,对 bean 的所有调用都将委托给EntityManager.

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import lombok.Delegate;
import org.springframework.stereotype.Service;

@Service
public class EntityManagerBridge implements EntityManager {
    @Delegate
    @PersistenceContext
    private EntityManager em;
}

现在我在 Wicket 组件中要做的就是EntityManagerBridge注入@SpringBean

@SpringBean
private EntityManager em; // inject EntityManagerBridge (implements EntityManager)

public MyFancyResource() {
    Injector.get().inject(this); // enable Spring injection for
}
于 2013-04-23T14:38:15.327 回答