`
qiuxia812913
  • 浏览: 8438 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

利用Spring BeanPostProcessor 初始化时加载数据到缓存

阅读更多
利用Spring BeanPostProcessor 初始化时加载数据到缓存


我们经常会在项目中碰到需要加载一些常量到内存中,以便不比每次需要使用时都去查询数据库, 如,一些国家信息,省份信息,地址信息等 不会变动 或变动很少,但数据量又比较大的数据, 这时我们就需要把这些数据加载进内存,需要使用时直接从内从中取。 下面是代码:

Spring配置

<!-- 自动加载国家信息到 内存 -->
<bean id="pbsTrackManagerPostProcess" class="com.mangocity.vacationhotel.business.action.PBSTrackManagerPostProcessor"/>

<bean id="startOnLoadService" class="com.mangocity.vacationhotel.business.service.impl.StartOnLoadService">
<property name="countryService" ref="countryService"/>
</bean>
然后定义一个类 实现接口 BeanPostProcessor

public class PBSTrackManagerPostProcessor implements BeanPostProcessor {

public Object postProcessAfterInitialization(Object obj, String arg1)
throws BeansException {
if(obj instanceof StartOnLoadService) {
((StartOnLoadService)obj).loadData(); //调用方法加载数据
}
return obj;
}

public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
return arg0;
}

}
再定义一个类(service)在这个类中进行调用DAO查询数据库 ,加载出数据

public class StartOnLoadService {
public static Map<String,List> dictionaryInfoMap = new HashMap<String, List>(); //保存国籍信息
private CountryService countryService; //受Spring 管理的Service 方法 调用Dao取数据

/**
* Spring 容器初始化时加载
*/
public void loadData() {
List optionList = countryService.getAllCountry();
dictionaryInfoMap.put("nationalMap", optionList);
}

public CountryService getCountryService() {
return countryService;
}

public void setCountryService(CountryService countryService) {
this.countryService = countryService;
}

}
就这样在Spring 启动时 数据就会被加载到 上面 StartOnLoadService 中的 dictionaryInfoMap 中。

之后可以通过如下代码获取初始化保存的Map信息

List optionList = StartOnLoadService.dictionaryInfoMap.get("nationalMap");

转载自:小武 2014年06月26日 于 无主题 · 专注开发技术 发表
本文固定链接:http://www.wuzhuti.cn/201426!908!06!093440.html
分享到:
评论

相关推荐

    详解使用Spring的BeanPostProcessor优雅的实现工厂模式

    在Spring框架中,BeanPostProcessor(BPP)是一个强大的接口,它允许我们自定义bean的初始化和销毁过程。BPP是在bean实例化之后,但初始化之前以及销毁之前执行特定操作的回调机制。通过实现这个接口,我们可以对...

    Spring的3级缓存和循环引用的理解.doc

    5. 如果bean需要AOP代理,如例子中的`@Transactional`注解,Spring会在bean初始化的后期,即`BeanPostProcessor#postProcessAfterInitialization`方法中添加代理。但在循环依赖的情况下,为了不阻塞bean的获取,AOP...

    《精通Spring2.X企业应用开发详解》

    以上九个步骤构成了Spring容器启动的核心流程,通过对这些步骤的详细了解,可以更好地理解Spring框架如何协调多个组件完成复杂的初始化过程。 #### 5.1.2 Spring容器高级主题 除了上述基础的启动流程之外,本章节...

    Spring_IOC详解.pdf

    在Spring的源码中,我们还可以看到如何通过`BeanPostProcessor`接口实现Bean的后处理器,用于在Bean初始化前后执行自定义操作,以及如何通过`InitializingBean`和`DisposableBean`接口实现Bean的初始化和销毁方法。...

    探秘Spring框架解决循环依赖的高效策略

    在Spring中,当检测到循环依赖时,它会先尝试从一级缓存获取bean,如果没有找到,就进入二级缓存查找。如果在二级缓存中找到了bean,那么就会使用这个部分初始化的bean,然后继续处理剩余的依赖。如果这个bean需要...

    Spring源码分析.docx

    在 BeanDefinition 对象创建完成后,Spring 框架会进行初始化准备工作。在这个阶段,Spring 框架会检查 Bean 对象的依赖关系,并将其添加到依赖关系图中。此外,Spring 框架还会检查 Bean 对象的生命周期方法,例如 ...

    Spring源码refresh方法调试笔记

    `refresh` 方法是Spring框架中的一个核心方法,它主要用于初始化整个应用上下文(ApplicationContext),包括加载配置文件、创建Bean实例等重要步骤。本文将深入剖析Spring框架中`refresh`方法的具体实现流程,以及...

    浅谈BeanPostProcessor加载次序及其对Bean造成的影响分析

    在Spring框架中,BeanPostProcessor(BPP)是一个至关重要的组件,它允许开发者在Spring容器创建Bean实例之后和初始化之前,以及初始化之后和实例化完成之前进行额外的处理。这为自定义Bean的行为提供了强大的灵活性...

    spring2.5学习PPT 传智博客

    - 谈论Bean后处理器(BeanPostProcessor)和自定义初始化逻辑。 7-14. **依赖注入和自动装配** - 依赖注入通过构造器注入、setter注入和@Resource注解进行。 - @Autowired注解自动装配依赖,基于类型匹配。 - @...

    Spring 面试题学习学习

    Bean首先通过构造函数实例化,然后属性被填充,接着执行初始化方法(如`init-method`指定的方法),初始化完成后调用`BeanPostProcessor`的`postProcessBeforeInitialization()`和`postProcessAfterInitialization()...

    Spring Bean生命周期&BeanDefinitions1

    4. **BeanPostProcessor**:BeanPostProcessor接口提供预初始化和后初始化方法,即`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`。这两个方法在Bean初始化前后执行,可以用于额外的处理...

    Spring的BeanFactory的接口注解

    - **功能**: 注册一个`BeanPostProcessor`,这些处理器会在Bean实例化之后、初始化之前或初始化之后被调用。 - **参数**: `beanPostProcessor`,实现了`BeanPostProcessor`接口的对象。 - **应用场景**: 使用`...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.6.1. 设置Bean使自动装配失效 3.3.7. 依赖检查 3.3.8. 方法注入 3.3.8.1. Lookup方法注入 3.3.8.2. 自定义方法的替代方案 3.4. bean的作用域 3.4.1. ...

    spring核心源码详细解读

    - **`finishBeanFactoryInitialization()`**:这是整个初始化过程中最复杂的步骤,涉及到所有Bean的实例化和初始化工作。 - **`finishRefresh()`**:刷新完成后的一些清理工作。 ### 三、深入理解`refresh()`方法 ...

    spring-framework-4-reference

    比如,可以通过实现BeanPostProcessor来在bean的初始化前后执行自定义逻辑。 classpath扫描和托管组件功能允许通过简单的注解(比如@Component, @Service等)来声明Spring管理的组件,而无需显式配置每个bean。 ...

    spring-reference

    Bean的生命周期包括初始化、正常运行和销毁阶段,Spring提供了各种机制来定制Bean的生命周期,如通过实现特定接口或使用注解。 3. **BeanFactory与ApplicationContext** BeanFactory和ApplicationContext是Spring...

    beandemo.rar

    本篇文章将通过"beandemo.rar"这个压缩包中的示例,详细解析Spring在初始化Bean时的回调函数调用顺序,帮助读者深入理解Spring的加载机制。 首先,我们来看"beandemo"这个示例项目。它通常包含一系列配置文件(如...

    Spring getBean流程图1

    这个过程涉及到多个步骤,确保Bean的正确创建、初始化以及依赖注入。以下是`getBean`方法的主要流程: 1. **开始**:当调用`ApplicationContext`或`BeanFactory`的`getBean`方法时,首先会检查请求的Bean是否已经...

    SSH笔记-IOC容器中 Bean 的生命周期

    在SSHnote_Spring_9_LifeCycle这个文件中,可能包含了详细的示例代码和讲解,展示了如何创建一个实现`BeanPostProcessor`的类,并在Bean初始化和销毁时添加自定义逻辑。通过学习这部分内容,你可以更深入地理解...

    spring中的BeanFactory解析xml文件

    6. **后处理**:Spring提供了扩展点,如BeanPostProcessor,允许在bean实例化后和初始化前执行自定义逻辑。 7. **单例管理**:对于单例bean,BeanFactory会缓存它们的实例,确保每次请求时返回的是同一个bean。 ...

Global site tag (gtag.js) - Google Analytics