`

动态加载 bean 到Spring Context

    博客分类:
  • J2EE
阅读更多
动态Bean的实现类
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();   
        }   
    }   
}  


测试类如下
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中
<bean id="dynamicLoadBean" class="com.spring.dynamic.DynamicLoadBean">          
</bean> 

动态加载的bean的配置文件
<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.

http://elicer.iteye.com/blog/438026
分享到:
评论

相关推荐

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

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

    spring-context-4.2.xsd.zip

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

    spring-context源码

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

    Spring動態加載Bean

    在Spring框架中,动态加载Bean是一项重要的功能,它允许我们在运行时根据需要加载或卸载Bean,而不是在应用启动时一次性加载所有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概念,可以根据不同的运行环境...

    Spring之动态注册bean的实现方法

    在 Spring 框架中,动态注册 Bean 是一个非常重要的功能,它允许开发者在应用程序运行时动态添加或删除 Bean,从而提高应用程序的灵活性和可维护性。下面我们将详细介绍 Spring 之动态注册 Bean 的实现方法。 动态...

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

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

    spring依赖注入bean

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

    Spring多种加载Bean方式解析

    主要的流程是找到定义Bean的方式,然后生成BeanDefinition后注册到Spring上下文中,由Spring自动创建Bean的实例。 BeanDefinition BeanDefinition是一个接口,用来描述一个Bean实例,例如是SINGLETON还是PROTOTYPE...

    Spring在应用中获得Bean的方法

    只要在字段、setter方法或构造函数上添加`@Autowired`,Spring就会自动匹配并注入相应的Bean。 ```java public class MyClass { @Autowired private MyBean myBean; } ``` 4. **通过`@Resource`注解** `@...

    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定义bean的三种方式和自动注入

    在Spring框架中,管理Bean的方式主要有三种:XML...总之,Spring提供了多种方式来定义和管理Bean,从XML到注解再到Java配置,使得开发更加灵活高效。同时,自动注入功能大大简化了依赖关系的建立,降低了代码耦合度。

    spring-context-3.0.0.RELEASE.jar.zip

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

    spring-framework-4.2.5.core_beans_context_aop.zip

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

    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注解类中使用spring容器中的bean_普通类中使用yml配置文件中的配置信息

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

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

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

    Java中Spring获取bean方法小结

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

Global site tag (gtag.js) - Google Analytics