我在一个研究项目中使用Pico容器。我对如何使用它有疑问。
以下是我的课程:
public class DependencySupplier {
public static MutablePicoContainer pico;
static {
pico = new DefaultPicoContainer();
pico.registerComponentImplementation(CollectionDao.class, CollectionDaoImpl.class);
pico.registerComponentImplementation(ReadingDao.class, ReadingDaoImpl.class);
pico.registerComponentImplementation(CollectionDetails.class, CollectionDetailsImpl.class);
pico.registerComponentImplementation(Reading.class, ReadingImpl.class);
}
public static CollectionDao getCollectionDao() {
return (CollectionDao) pico.getComponentInstance(CollectionDao.class);
}
public static ReadingDao getReadingDao() {
return (ReadingDao) pico.getComponentInstance(ReadingDao.class);
}
}我的怀疑是:
如何用上面的实现实例化Address对象,因为'address1‘和'address2’必须由用户提供,并且在运行时可用?
发布于 2013-07-09 08:34:37
嗯,实际上这不是一个正确的方式使用野餐..。
在大多数情况下,您不应该直接从pico上下文中查找组件。
你需要在pico注册你的DAO,服务,其他逻辑类.他们需要获得引用的DAOs等,只需将它们声明为构造函数参数。然后,在引导类中,注册需要从容器中获取组件的主逻辑类,并调用其方法(或使用可启动生命周期),至于地址实例,我不确定您是否需要从pico中实例化它们(因为我没有看到容器对地址可能满足的任何依赖关系,那么又有什么意义呢?)
但是,如果您需要,您可以注册准备好的实例,如pico.registerComponentInstance(新的AddressImpl(.))然后,可以使用构造函数参数Address[]加载项注入所有可用实例。还有另一种方法,直接从pico实例化几个实例,但我认为您只是不需要它
https://stackoverflow.com/questions/17448991
复制相似问题