动态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.
分享到:
相关推荐
在Spring应用中,Context通常通过`ApplicationContext`接口来实例化,如`ClassPathXmlApplicationContext`或`FileSystemXmlApplicationContext`,这些类用于加载XML配置文件并初始化bean。 创建自定义对象的基本...
除了基础的配置,`spring-context-4.2.xsd`还支持对资源加载、国际化、消息源、任务调度、事件监听等高级特性。例如,`<context:component-scan>`元素可以自动扫描并注册带有特定注解的bean,极大地简化了代码配置。...
`spring-context`包含了强大的Spring表达式语言(SpEL),它允许在运行时对bean和属性进行动态查询和修改。SpEL可以用在注解的值、bean的属性绑定以及`ExpressionEvaluator`的表达式解析等多个场景。 综上所述,`...
在Spring框架中,动态加载Bean是一项重要的功能,它允许我们在运行时根据需要加载或卸载Bean,而不是在应用启动时一次性加载所有Bean。这对于处理不同环境、减少内存占用或者实现按需服务的情况非常有用。本篇文章将...
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
9. **Spring Expression Language (SpEL)**:Spring的表达式语言允许在运行时查询和操作对象图,常用于AOP、Bean装配和动态数据绑定。 10. **Profile功能**:Spring 3.1引入了Profile概念,可以根据不同的运行环境...
在 Spring 框架中,动态注册 Bean 是一个非常重要的功能,它允许开发者在应用程序运行时动态添加或删除 Bean,从而提高应用程序的灵活性和可维护性。下面我们将详细介绍 Spring 之动态注册 Bean 的实现方法。 动态...
在Spring框架中,动态装配bean并将其注入到Controller中是一种常见的需求,这允许我们根据运行时的条件或配置来创建和管理对象。本篇将详细解释两种实现方式:基于XML配置和使用`@PostConstruct`注解。 首先,让...
在 Java 应用中使用 Spring,我们需要创建一个 Spring 上下文(ApplicationContext)来加载 Bean 的定义。这个上下文将负责创建和管理 Bean,以及执行依赖注入。通常,我们可以使用 `ClassPathXmlApplicationContext...
主要的流程是找到定义Bean的方式,然后生成BeanDefinition后注册到Spring上下文中,由Spring自动创建Bean的实例。 BeanDefinition BeanDefinition是一个接口,用来描述一个Bean实例,例如是SINGLETON还是PROTOTYPE...
只要在字段、setter方法或构造函数上添加`@Autowired`,Spring就会自动匹配并注入相应的Bean。 ```java public class MyClass { @Autowired private MyBean myBean; } ``` 4. **通过`@Resource`注解** `@...
Spring提供了多种注解,如`@Component`、`@Service`、`@Repository`和`@Controller`,它们可以用来标记Bean类,自动注册到Spring容器。同时,使用`@Autowired`注解可以完成依赖注入。 ```java @Service public ...
在Spring中,Context XML配置文件是初始化和管理应用程序上下文的关键,它定义了bean的创建、依赖关系以及服务的提供方式。本文将深入探讨Spring工程的初始化模块与基础配置,以及如何利用Maven构建这样的工程。 ...
在Spring框架中,管理Bean的方式主要有三种:XML...总之,Spring提供了多种方式来定义和管理Bean,从XML到注解再到Java配置,使得开发更加灵活高效。同时,自动注入功能大大简化了依赖关系的建立,降低了代码耦合度。
1. **配置管理**:Spring Context通过XML、注解或Java配置类等方式加载配置信息,解析并管理Bean定义。 2. **依赖注入**:根据配置信息,Spring Context自动完成对象的实例化、初始化和装配,以及对象间的依赖关系。...
这里提到的是一组完整的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 Context 还充当了一个全局的bean工厂,允许任何地方的bean获取到其他bean的引用,增强了组件间的交互。此外,它支持消息源和AOP方面的配置,使得应用程序能够更好地适应不同的运行环境。 4. **Spring AOP**...
虽然通常这个注解用于Spring管理的Bean,但也可以在非Spring管理的类中使用,只要确保配置的加载和绑定过程正确执行。 为了读取YAML配置,你需要在Spring Boot应用的启动类或者其他适当的初始化点,注册`@...
依赖注入是Spring的核心特性,ApplicationContext通过读取配置文件中的bean定义,自动将依赖的bean注入到目标bean中,降低了代码的耦合度,提高了可测试性和可维护性。 五、AOP支持 ApplicationContext还支持AOP...
- **通过代码注解**:Spring也支持通过注解来获取Bean,如`@Autowired`和`@Resource`,它们能够自动将依赖注入到目标字段或方法中,无需手动从ApplicationContext获取。 3. **静态Singleton Bean Manager** 通常...