Spring Bean扩展接口 -- ApplicationContextAware源码分析
来源:互联网 发布:淘宝怎么添加宝贝规格 编辑:程序博客网 时间:2024/06/05 16:16
一、首先我们看一下ApplicationContextAware接口的源码
package org.springframework.context;import org.springframework.beans.BeansException;import org.springframework.beans.factory.Aware;public interface ApplicationContextAware extends Aware {void setApplicationContext(ApplicationContext applicationContext) throws BeansException;}
package org.springframework.beans.factory; public abstract interface Aware { }
1.ApplicationContext是上下文的意思,我们编写的类实现ApplicationContextAware接口就可以获取Spring容器的应用上下文环境。当容器加载Spring的配置文件时会自动调用ApplicationContextAware的setApplicationContext()方法自动获取ApplicationContext对象,利用ApplicationContext可以得到我们想要的各种上下文,比如最常用的获取Spring实例,接下来会有实例。
2.有人可能会问Aware接口什么都没做为什么还用集成它呢?因为不仅ApplicationContextAware集成了它,其他的接口也同样集成了Aware接口,如:BeanNameAware、BeanFactoryAware和ResourceLoaderAware等。因此集成Aware接口的目的主要是实现java多态的特性。
二、SpringContextHolder实现ApplicationContextAware接口
testwebapp.com.wangzuojia.util;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;@Componentpublic class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;public static Object getBean(String name) {return applicationContext.getBean(name);}public static <O> O getBean(String name, Class<O> requiredType) {return applicationContext.getBean(name, requiredType);}public static <O> O getBean(Class<O> requiredType) {return applicationContext.getBean(requiredType);}public static <O> String[] getBeanNamesForType(Class<O> requiredType) {return applicationContext.getBeanNamesForType(requiredType);}/** * 实现ApplicationContextAware的setApplicationContext方法,设置上下文环境 */@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}}
三、实例
public class GenerationApplicationNoUtil {/** * 获取下一个流水号,获取时根据查询条件判断,如果没有则新加一条记录,否则加1 * @throws Exception */public static String getMaxSerialNumber(String branchcode, String year,String orgcode, String serialtype, String hmlb, String productcode, int limitLength, String padStr) {......//此处使用ApplicationContextAware获取Spring BeanTCounterService tCounterService = SpringContextHolder.getBean(TCounterService.class);String simpleCode = tCounterService.getMaxSerialNumber(branchcode, year,orgcode, serialtype, hmlb, productcode);return simpleCode;} catch (Exception e) {logger.error("获取流水号报错:" + ExceptionUtil.getErrorMsg(e), e);throw new BusinessException("获取流水号报错:"+ ExceptionUtil.getErrorMsg(e), e);} finally {// 还原为之前正在使用的dbtypeif (oldDbtype != null) {DataSourceContextHolder.setDataSource(oldDbtype);}}}}
1 0
- Spring Bean扩展接口 -- ApplicationContextAware源码分析
- Spring Bean扩展接口 -- InitializingBean源码分析
- Spring ApplicationContextAware 获取bean
- Spring中通过实现ApplicationContextAware接口获取bean
- 通过ApplicationContextAware接口获取Spring配置文件中的所有Bean
- spring ApplicationContextAware接口介绍
- Spring ApplicationContextAware接口
- spring中ApplicationContextAware接口
- Spring Bean常用扩展接口
- ApplicationContextAware动态获取spring bean
- 三 spring源码解析--- Bean解析接口结构分析
- Spring中ApplicationContextAware接口用法
- 通过实现ApplicationContextAware接口获取bean
- 通过实现ApplicationContextAware接口获取bean
- 通过实现ApplicationContextAware接口动态获取bean
- web 工程中利用Spring的 ApplicationContextAware接口自动注入bean
- Spring之Bean实现了ApplicationContextAware等aware接口,对于setApplicationContext方法执行时间点的说明
- 通过ApplicationContextAware获取spring容器中的bean
- [算法]详解关键路径算法
- Django Rest Framework - 实例PartyDemo 之 API文档
- C++ vector 赋值
- 微信小程序正式发布,一分钟了解什么是小程序!
- SpringMVC数据校验
- Spring Bean扩展接口 -- ApplicationContextAware源码分析
- 安卓.9.png图片制作
- 使用geronimo-javamail_1.4发送邮件的有关说明
- 【中级】2017项目集成管理工程师备考第五章-立项管理(下)
- 《iOS 7 Human Interface Guidelines中文版》读书笔记(2)
- Cassandra工具:cqlsh(the cql shell)
- 使用pycharm打开csv文件,csv文件中的中文出现乱码的解决方案
- 谷歌浏览器启动页被篡改为hao.7654.com的解决办法
- 架构师知识体系(1)--WEB架构师成长之路