首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Picocontainer?

如何使用Picocontainer?
EN

Stack Overflow用户
提问于 2014-01-05 20:36:46
回答 2查看 231关注 0票数 0

我正在尝试使用Picocontainer (picocontainer 2.5.1.jar)。

我已经配置了所有的东西,我检查了所有东西是否正常工作,直到试图从容器中检索任何东西.:p

我想我应该使用来自PicoServletContainerFilter类的静态方法PicoServletContainerFilter(类类型),如下所示:

代码语言:javascript
复制
public static Object getRequestComponentForThread(Class type) {
        MutablePicoContainer requestContainer = ServletFilter.currentRequestContainer.get();
        MutablePicoContainer container = new DefaultPicoContainer(requestContainer);
        container.addComponent(type);
        return container.getComponent(type);
}

但是您可以看到,在该方法中,创建了DefaultPicoContainer的新实例,并且正在注册我试图检索的类型。

  • 如果类型是类-新实例被创建并返回,而不是从父容器缓存的实例.
  • 如果类型是一个接口-运行时异常("'ExampleInterface‘是不可实例化的“)抛出,在第3行(addComponent)。

我的问题是:如何使用这个库?--我很确定我能理解它,但是实现这一方法却让我突然想到.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-09 14:55:00

实际上,除非有特殊情况,否则不应该使用getComponent。当您向web.xml添加pico上下文侦听器时,将为您创建App/Session/请求容器。只需为每个作用域配置组件,微微容器就会自动注入组件,并在需要时实例化组件。还可以使用可启动的生命周期接口。

票数 1
EN

Stack Overflow用户

发布于 2014-01-05 23:22:58

我想出了一个可以接受的解决方案--编写自己版本的org.picocontainer.web.PicoServletContainerFilter.ServletFilter --并添加了一种方法:

代码语言:javascript
复制
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);   
    }
}

我不知道这是不是最好的办法,但对我来说很好。但是,如果您知道更好的解决方案,我将非常感谢您提供以下信息:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20938840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档