可以手工注入bean,不过它的生命周期就要靠自己的代码控制了。sfb=new LocalSessionFactoryBean();
sfb.setDataSource(dataSource);
sfb.afterPropertiesSet();mySessionFactory=(SessionFactory)sfb.getObject();

解决方案 »

  1.   

    <bean id="mydataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    </bean>
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource">
                <ref local="mydataSource"/>
            </property>
      </bean>
    直接在bean内定义private ComboPooledDataSource mydataSource;
    然后对mydataSource进行getter 和setter应该就可以了啊
      

  2.   

    to: 回复人:Saro(这也不是江水,这是二十年流不尽的英雄血。)
    sfb=new LocalSessionFactoryBean();
    sfb.setDataSource(dataSource);
    sfb.afterPropertiesSet();mySessionFactory=(SessionFactory)sfb.getObject();你的这个方法我如何在 sping 的 AbstractApplicationContext中得到?
    to:zghmu007()
    这也是我目前只能使用的方法了
      

  3.   

    搞错意思了 ,楼主要的是不是这样:ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");context.addBeanFactoryPostProcessor(new BeanFactoryPostProcessor() {
                public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    ComboPooledDataSource cp = new ComboPooledDataSource;
    ..........
    beanFactory.getBeanDefinition("mySessionFactory").getPropertyValues().addPropertyValue("dataSource", cp );
               }
            });context.refresh();重载整个applicationContext是必然的,为什么有这样的需求?
      

  4.   

    为什么有这样的需求?
    1.现在的sping,webwork这些东西用起来是好用,就是配置文件太多了。我想尽量的简化配置。
    2.部分配置我想动态载入,有意义才载入,不必要的不载入.
    3.载入的bean不同,软件的功能可能不同.
    4.sping 实现插件功能,扫描有那些插件,然后对应的载入sping.利用sping 的容器可以实现很多不错的功能。能够动态载入,就可以自由的控制。
      

  5.   

    to:Saro(这也不是江水,这是二十年流不尽的英雄血。) 你这个方法只是设置了属性,没有能创建一个完整的bean对象,
      

  6.   

    to:kubbye(小蛤蟆就是我) 
    读取配置文件,然后写入这样做就不入,直接生成配置文件,在导入了。
      

  7.   

    动态改配置文件,然后refresh不就一下就行了。如果你认为重载所有bean不可接受的话,这个,大概你需要自己去实现ApplicationContext接口了(这个很难,你要考虑到bean的相互依赖关系是不可预期的,autowire,proxy bean,PropertyOverrideConfigurer等等),Spring现有的实现都是基于xml文件配置,bean配置是不应该变来变去的。不知道picocontainer如何,那是一个微内核的ioc容器,我没用过,或许能满足你的需求。完全不用配置文件也是可行的,也就是全部写在代码里,自己管理bean的依赖注入及生命周期,如这个:
    ComboPooledDataSource dataSource = new ComboPooledDataSource
    sfb=new LocalSessionFactoryBean();
    sfb.setDataSource(dataSource);
    sfb.afterPropertiesSet();
    mySessionFactory=(SessionFactory)sfb.getObject();如上,在某处初始化SessionFactory,然后用静态变量保持,在dao里面
    new HibernateTemplate(getSessionFactory()).execute()......
    如果要用Spring进行手动事务控制话,Spring文档里也有详细的例子。
      

  8.   

    to:Saro(这也不是江水,这是二十年流不尽的英雄血。) 
    非常感谢
    看了一下 PicoContainer 感觉还真不错。不知道为什么sping 还没有支持动态注入,可能是我还不会吧 :)
      

  9.   

    研究有进展 现在可以注册 Singleton 方式了 代码入下        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.test.xml");
            ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
            ComboPooledDataSource cp = new ComboPooledDataSource();//(ComboPooledDataSource)beanFactory.getBean("mydb");
            beanFactory.registerSingleton("mydb",cp);
            if (beanFactory.containsBean("mydb"))
            {            System.out.println("-------------------------cp1=" + cp);
                ComboPooledDataSource cp2 = (ComboPooledDataSource)beanFactory.getBean("mydb");
                System.out.println("-------------------------cp2=" + cp2);
            } else System.out.println("---------------------没有注册成功");
      

  10.   

    但还不知道如何动态设置 非Singleton 方式,和要 其它配置属性