`
buzhucele
  • 浏览: 331291 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态加载 bean 到Spring Context(转)

阅读更多
动态Bean的实现类
Java代码  收藏代码

    import java.io.IOException; 
     
    import org.springframework.beans.BeansException; 
    import org.springframework.beans.factory.support.BeanDefinitionRegistry; 
    import org.springframework.beans.factory.xml.ResourceEntityResolver; 
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; 
    import org.springframework.context.ApplicationContext; 
    import org.springframework.context.ApplicationContextAware; 
    import org.springframework.context.ConfigurableApplicationContext; 
     
    /**
     * 
     * This class used to dynamic loan bean to spring context during runtime
     * 
     *
     */ 
    public class DynamicLoadBean implements ApplicationContextAware{ 
     
        private ConfigurableApplicationContext applicationContext = null; 
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 
            this.applicationContext = (ConfigurableApplicationContext)applicationContext; 
        } 
        public ConfigurableApplicationContext getApplicationContext() { 
            return applicationContext; 
        } 
         
        /**
         * 向spring的beanFactory动态地装载bean
         * @param configLocationString 要装载的bean所在的xml配置文件位置。
    spring配置中的contextConfigLocation,同样支持诸如"/WEB-INF/ApplicationContext-*.xml"的写法。
         */ 
        public void loadBean(String configLocationString){ 
            XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader((BeanDefinitionRegistry)getApplicationContext().getBeanFactory()); 
            beanDefinitionReader.setResourceLoader(getApplicationContext()); 
            beanDefinitionReader.setEntityResolver(new ResourceEntityResolver(getApplicationContext())); 
            try { 
                String[] configLocations = new String[]{configLocationString}; 
                for(int i=0;i<configLocations.length;i++) 
                    beanDefinitionReader.loadBeanDefinitions(getApplicationContext().getResources(configLocations[i])); 
            } catch (BeansException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
    } 




测试类如下
Java代码  收藏代码

    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:data-access-config.xml");    
            DynamicLoadBean dynamicBeanLoad =(DynamicLoadBean)ctx.getBean("dynamicLoadBean"); 
     
    dynamicBeanLoad.loadBean("data-access-dynamicConfig.xml"); 
    MagazineService magezineService = (MagazineService)ctx.getBean("magazineService");  



data-access-config.xml文件中包含原始的bean, data-access-dynamicConfig.xml文件中包含要动态加载的bean的配置文件。

不要忘了把DyanmicLoanBean 配置到原始的spring context 配置文件中也就时data-access-config.xml中

Java代码  收藏代码

    <bean id="dynamicLoadBean" class="com.spring.dynamic.DynamicLoadBean">        
    </bean> 



动态加载的bean的配置文件

Java代码  收藏代码

    <bean id="magazineService" class="com.ibank.test.openjpa.dao.MagazineServiceImpl">   
       <property name="magazineDao" ref="magazineDao"/>   
    </bean>  



当然了动态加载的bean也可以reference 到原始的context中的bean.比如magazineDao就是在data-access-config.xml中配置的一个bean.
分享到:
评论

相关推荐

    利用Spring Context上下文创建自定义对象

    在Spring应用中,Context通常通过`ApplicationContext`接口来实例化,如`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`,这些类用于加载XML配置文件并初始化bean。 创建自定义对象的基本...

    Spring動態加載Bean

    在Spring框架中,动态加载Bean是一项重要的功能,它允许我们在运行时根据需要加载或卸载Bean,而不是在应用启动时一次性加载所有Bean。这对于处理不同环境、减少内存占用或者实现按需服务的情况非常有用。本篇文章将...

    spring-context源码

    `spring-context`包含了强大的Spring表达式语言(SpEL),它允许在运行时对bean和属性进行动态查询和修改。SpEL可以用在注解的值、bean的属性绑定以及`ExpressionEvaluator`的表达式解析等多个场景。 综上所述,`...

    Spring多种加载Bean方式解析

    Spring多种加载Bean方式解析 本篇文章主要介绍了Spring多种加载Bean方式解析,通过对Bean加载方式的详细解析,了解Spring中的Bean加载机制。 定义Bean的方式 在Spring中,定义Bean的方式有多种,常见的定义Bean的...

    spring-context-4.2.xsd.zip

    除了基础的配置,`spring-context-4.2.xsd`还支持对资源加载、国际化、消息源、任务调度、事件监听等高级特性。例如,`&lt;context:component-scan&gt;`元素可以自动扫描并注册带有特定注解的bean,极大地简化了代码配置。...

    spring bean XML配置入门

    一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...

    spring-context-3.1.1.RELEASE.zip

    9. **Spring Expression Language (SpEL)**:Spring的表达式语言允许在运行时查询和操作对象图,常用于AOP、Bean装配和动态数据绑定。 10. **Profile功能**:Spring 3.1引入了Profile概念,可以根据不同的运行环境...

    动态的装配bean,注入到Controller中

    在Spring框架中,动态装配bean并将其注入到Controller中是一种常见的需求,这允许我们根据运行时的条件或配置来创建和管理对象。本篇将详细解释两种实现方式:基于XML配置和使用`@PostConstruct`注解。 首先,让...

    加载jar包中的spring配置文件

    例如,`classpath:spring-context.xml`意味着Spring会尝试在类路径下的`spring-context.xml`文件中加载配置。 3. **`classpath*:`前缀**:这个前缀与`classpath:`类似,但有一个重要的区别。`classpath*:`不仅会...

    spring依赖注入bean

    在 Java 应用中使用 Spring,我们需要创建一个 Spring 上下文(ApplicationContext)来加载 Bean 的定义。这个上下文将负责创建和管理 Bean,以及执行依赖注入。通常,我们可以使用 `ClassPathXmlApplicationContext...

    Spring在应用中获得Bean的方法

    对于接口,Spring提供了`@Lookup`注解,可以在运行时动态创建Bean实例。这通常用于实现类的懒加载或者运行时的选择。 6. **使用`ApplicationContextAware`接口** 实现`ApplicationContextAware`接口,可以获取到`...

    spring创建bean简单示例

    Spring提供了多种注解,如`@Component`、`@Service`、`@Repository`和`@Controller`,它们可以用来标记Bean类,自动注册到Spring容器。同时,使用`@Autowired`注解可以完成依赖注入。 ```java @Service public ...

    Test05_Spring_Context_XML.rar

    在Spring中,Context XML配置文件是初始化和管理应用程序上下文的关键,它定义了bean的创建、依赖关系以及服务的提供方式。本文将深入探讨Spring工程的初始化模块与基础配置,以及如何利用Maven构建这样的工程。 ...

    spring-context-3.0.0.RELEASE.jar.zip

    1. **配置管理**:Spring Context通过XML、注解或Java配置类等方式加载配置信息,解析并管理Bean定义。 2. **依赖注入**:根据配置信息,Spring Context自动完成对象的实例化、初始化和装配,以及对象间的依赖关系。...

    spring-context-3.2.0 spring-core-3.2.0 等齐全的Spring jar包

    这里提到的是一组完整的Spring库,包括`spring-core`、`spring-context`、`spring-webmvc`、`spring-web`、`spring-beans`、`spring-test`、`spring-jdbc`、`spring-orm`、`spring-aop`和`spring-tx`,它们都是3.2.0...

    spring-framework-4.2.5.core_beans_context_aop.zip

    Spring Context 还充当了一个全局的bean工厂,允许任何地方的bean获取到其他bean的引用,增强了组件间的交互。此外,它支持消息源和AOP方面的配置,使得应用程序能够更好地适应不同的运行环境。 4. **Spring AOP**...

    Java中Spring获取bean方法小结

    - **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...

    org.springframework.context_3.0.5.release.jar.zip

    依赖注入是Spring的核心特性,ApplicationContext通过读取配置文件中的bean定义,自动将依赖的bean注入到目标bean中,降低了代码的耦合度,提高了可测试性和可维护性。 五、AOP支持 ApplicationContext还支持AOP...

    在非spring注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

    虽然通常这个注解用于Spring管理的Bean,但也可以在非Spring管理的类中使用,只要确保配置的加载和绑定过程正确执行。 为了读取YAML配置,你需要在Spring Boot应用的启动类或者其他适当的初始化点,注册`@...

    Spring配置文件spring-context.zip

    Spring的`ApplicationContext`是Spring容器的实现,它加载配置文件并管理bean的生命周期。开发者可以通过`ApplicationContext`获取bean实例,进行依赖注入和其他操作。例如: ```java ApplicationContext context = ...

Global site tag (gtag.js) - Google Analytics