我正在尝试使用Picocontainer Web(picocontainer-web-core-2.5.1.jar)。
我已经配置了所有内容,我检查了一切正常,直到尝试从容器中检索任何东西......:p
我虽然应该使用PicoServletContainerFilter类中的静态方法getRequestComponentForThread(Class type),如下所示:
public static Object getRequestComponentForThread(Class type) {
MutablePicoContainer requestContainer = ServletFilter.currentRequestContainer.get();
MutablePicoContainer container = new DefaultPicoContainer(requestContainer);
container.addComponent(type);
return container.getComponent(type);
}
但正如您所看到的,在该方法中,创建了DefaultPicoContainer的新实例,并且正在注册我正在尝试检索的类型。
我的问题是:如何使用这个库?我非常肯定我理解它,但这种方法的实现让我大吃一惊......
答案 0 :(得分:1)
实际上除非有特殊情况,否则不应使用getComponent。 将pico上下文侦听器添加到web.xml时,将为您创建App / Session / Request容器。 只需为每个范围配置组件,picocontainer将自动注入内容并在需要时实例化组件。还可以使用Startable生命周期界面。
答案 1 :(得分:0)
我想出了一个可接受的解决方案 - 编写自己版本的org.picocontainer.web.PicoServletContainerFilter.ServletFilter - 并添加一个方法:
public class MyComponentContainer extends PicoServletContainerFilter {
/*
code from original class PicoServletContainerFilter.ServletFilter
[...]
*/
public static <T> T getComponent(Class<T> clazz) {
return (T) currentRequestContainer.get().getComponent(clazz);
}
}
我不确定这是否是最好的,但它对我来说很好。但是,如果您知道更好的解决方案,我将不胜感激:)