|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-11-06
jeremydomett 写道 我需要的 bean 的个数并不是固定的~
而是要根据运行时的需要动态添加的~ 也就是我想在运行是向容器里动态增加 和 在配置文件里写<bean> 一样功能的东西~ 然后再 用 getBean("***") 来使用动态增加的 bean 可以看看 tapestry5 IOC。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-06
jeremydomett 写道 spring 是根据在配置文件里写的 <bean>....</bean>
在 ApplicationContext 里可以使用 getBean 来获得一个对象. 问一下: 能不能不在配置文件里写 <bean>....</bean> 而是通过写程序来动态 给 context 添加 bean ? 这个需要直接对spring IOC编程了,比如扩展spring IOC的LoadBeanDefinition的相关实现。但我不太明白,如果想要动态的bean,为什么不在context里定义一个FactoryBean然后由他为你生成呢? |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-07
jeremydomett 写道 我需要的 bean 的个数并不是固定的~
而是要根据运行时的需要动态添加的~ 也就是我想在运行是向容器里动态增加 和 在配置文件里写<bean> 一样功能的东西~ 然后再 用 getBean("***") 来使用动态增加的 bean Spring bean的5种scope都不能满足你的要求么?你的业务很特别啊,有点好奇~~~ |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-07
动态的Bean管理.看一下OSGI.
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-20
osgi 是个好东西, 确实能满足你很多需要的哦
|
|
| 返回顶楼 | |
|
最后更新时间:2008-04-28
这并不奇怪, 使用XML 来进行配置,这种配置方式是一种"静态"绑定。但在一些场境中,为了更加灵活,需要在运行时进行运态绑定。
举个例子,做 RCP 开发时,UI组件的生命周期是由RCP 框架来管理,并非由IOC 来创建,这时我们就不能将这些组件写到XML文件中。 解决办法都有好多,例如 在UI 与业务层中建立一个簿层,使用 ApplicationContext (将依赖转为Spring API)来获取业务类。 还有就是, Spring 也提供使用代码方式来创建 bean。只不过,大部分人习惯使用 XML 来配置,所以了解的不多(包括我。。 ^-^), 下面一段编程加入Bean的代码: public static void main(String[] args) { DefaultListableBeanFactory beanRegistry = new DefaultListableBeanFactory(); BeanFactory container = (BeanFactory)bindViaCode(beanRegistry); FXNewsProvider newsProvider = (FXNewsProvider)container.getBean("djNewsProvider"); newsProvider.getAndPersistNews(); } public static BeanFactory bindViaCode(BeanDefinitionRegistry registry) { AbstractBeanDefinition newsProvider = new RootBeanDefinition(FXNewsProvider.class,true); AbstractBeanDefinition newsListener = new RootBeanDefinition(DowJonesNewsListener.class,true); AbstractBeanDefinition newsPersister = new RootBeanDefinition(DowJonesNewsPersister.class,true); // register beans to container registry.registerBeanDefinition("djNewsProvider", newsProvider); registry.registerBeanDefinition("djListener", newsListener); registry.registerBeanDefinition("djPersister", newsPersister); // resolve dependencies // 1 constructor injection ConstructorArgumentValues argValues = new ConstructorArgumentValues(); argValues.addIndexedArgumentValue(0, newsListener); argValues.addIndexedArgumentValue(1, newsPersister); newsProvider.setConstructorArgumentValues(argValues); // 2 setter injection MutablePropertyValues propertyValues = new MutablePropertyValues(); propertyValues.addPropertyValue(new PropertyValue("newsListener",newsListener)); propertyValues.addPropertyValue(new PropertyValue("newPersistener",newsPersister)); newsProvider.setPropertyValues(propertyValues); // binding is done return (BeanFactory)registry; } 正如,java 这样的静态语言受欢迎的同时,也会有 Ruby 这样的动态语言受热棒。动静相宜,这是太极所表达的真理。 |
|
| 返回顶楼 | |








