ApplicationContextAware获取Spring上下文,通过基类获取properties中的配置属性
来源:互联网 发布:php 记录蜘蛛程序 编辑:程序博客网 时间:2024/05/19 16:38
说明: 该方法实现了,通过继承JAR包中基类来获取properties中配置的相关属性,并添加至spring容器中,供代码中使用。
1。 基类
package com.ffcs.icity.config;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import org.apache.commons.lang3.builder.ToStringBuilder;import org.apache.commons.lang3.builder.ToStringStyle;import org.springframework.beans.factory.InitializingBean;import org.springframework.beans.factory.annotation.Value;/** * 此类用于存放框架相关的配置. * * */public abstract class BaseApplicationConfig implements InitializingBean {@Value("${log.isDumpRequest:false}")@FieldDescription("是否dump请求")private boolean isDumpRequest = false;@Value("${log.logger.root.level:DEBUG}")@FieldDescription("日志级别等级")private String logLevel = "DEBUG";public boolean isDumpRequest() {return isDumpRequest;}public String getLogLevel() {return logLevel;}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);}@Target({ ElementType.FIELD })@Retention(RetentionPolicy.RUNTIME)public @interface FieldDescription {String value();}@Overridepublic void afterPropertiesSet() throws Exception {//this.originalApplicationConfig = BeanUtils.copyObject(this, "originalApplicationConfig");}}
2。 配置文件内容
#log levellog.logger.root.level=DEBUG#log open flaglog.isDumpRequest=true
3。 实现ApplicationContextAware接口,获取spring上下文相关类
package com.ffcs.icity.config;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * BaseApplicationConfig实例的获取 * @author linwei * */public class ApplicationConfigHolder implements ApplicationContextAware {private final static Logger logger = LoggerFactory.getLogger(ApplicationConfigHolder.class);private static BaseApplicationConfig applicationConfig;public static <T> T getApplicationConfig() {return (T)applicationConfig;}/** * 通过实现ApplicationContextAware接口,获取Spring的实例上下文,并获取BaseApplicationConfig实例 */@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {//获取类型为BaseApplicationConfig的BEANapplicationConfig = applicationContext.getBean(BaseApplicationConfig.class);logger.info("loaded initial application config:{}", applicationConfig);}}
package com.ffcs.icity.config;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * Spring上下文的获取 * @author linwei * */public class ApplicationContextHolder implements ApplicationContextAware{private static ApplicationContext applicationContext;public static ApplicationContext getApplicationContext() {return ApplicationContextHolder.applicationContext;}@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {ApplicationContextHolder.applicationContext=applicationContext;}}
package com.ffcs.icity.config;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * 此类保存当前请求的上下文信息. * * */public class RequestContextHolder {/** * 当前请求的请求对象 */private static ThreadLocal<HttpServletRequest> request = new ThreadLocal<HttpServletRequest>();/** * 当前请求的请求对象 */private static ThreadLocal<HttpServletResponse> response = new ThreadLocal<HttpServletResponse>();/** * 当前请求的请求参数 */private static ThreadLocal<Object> requestArgument = new ThreadLocal<Object>();/** * 当前请求的请求ID */private static ThreadLocal<String> requestId = new ThreadLocal<String>();public static HttpServletRequest getRequest() {return request.get();}public static void setRequest(HttpServletRequest request) {RequestContextHolder.request.set(request);}public static HttpServletResponse getResponse() {return response.get();}public static void setResponse(HttpServletResponse response) {RequestContextHolder.response.set(response);}public static Object getRequestArgument() {return requestArgument.get();}public static void setRequestArgument(Object requestArgument) {RequestContextHolder.requestArgument.set(requestArgument);}public static String getRequestId() {return requestId.get();}public static void setRequestId(String requestId) {RequestContextHolder.requestId.set(requestId);}public static void clear() {request.remove();response.remove();requestArgument.remove();requestId.remove();}}
说明:以上工具类可以存放至JAR包中,供其他的项目导入使用。
4。 在spring的web项目中,新建一个类,继承基类,并在spring中注入相关BEAN,即可获取其相关的属性信息,如下:
package com.ffcs.icity.support;import com.ffcs.icity.config.BaseApplicationConfig;public class ApplicationConfig extends BaseApplicationConfig {}
spring的配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:jdbc="http://www.springframework.org/schema/jdbc"xmlns:jee="http://www.springframework.org/schema/jee"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"default-lazy-init="false"><!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="com.ffcs.icity"><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller" /></context:component-scan><bean id="springContext" class="com.ffcs.icity.support.TestApplicationContext" lazy-init="false"/><bean class="com.ffcs.icity.config.ApplicationContextHolder" /><bean class="com.ffcs.icity.support.ApplicationConfig" /><bean class="com.ffcs.icity.config.ApplicationConfigHolder" /><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="messageConverters"><list><ref bean="mappingJacksonHttpMessageConverter" /></list></property></bean><bean id="mappingJacksonHttpMessageConverter"class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"><property name="objectMapper"><bean class="org.codehaus.jackson.map.ObjectMapper"><property name="dateFormat"><bean class="java.text.SimpleDateFormat"><constructor-arg type="java.lang.String"value="yyyy-MM-dd HH:mm:ss"></constructor-arg></bean></property></bean></property></bean><bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"><!--<property name="interceptors"><list> <ref bean="stopWatchHandlerInterceptor"></ref><ref bean="handlerInterceptorTest1"></ref><ref bean="handlerInterceptorTest2"></ref></list></property>--></bean><context:property-placeholder ignore-unresolvable="true" location="classpath*:/config.properties" /></beans>
说明: 以上bean的设置请关闭延迟加载功能。即整个配置文件使用 default-lazy-init="false" 属性,或者在
<bean id="springContext" class="com.ffcs.icity.support.TestApplicationContext" lazy-init="false"/> bean中直接设置延迟加载关闭。
或者另外一种方式,打开延迟加载功能,但在代码中需要自己手动进行注入,即使用@Autowired 实现自己的手动注入,实现该bean的初始化工作。
因为延迟加载打开后,需要代码中手动注入才可以实现bean工厂的初始化。(延迟加载关闭,则在项目启动时,由web容器自动进行初始化加载。)
5. 代码直接调用例子:
可直接新建方法:isDumpRequest() ,这样就获取到最新的配置文件中配置的值。如配置文件未配置,则使用基类中定义的默认值.
private boolean isDumpRequest() {
return getApplicationConfig().isDumpRequest();
}
private BaseApplicationConfig getApplicationConfig() {
return ApplicationConfigHolder.getApplicationConfig();
}
0 0
- ApplicationContextAware获取Spring上下文,通过基类获取properties中的配置属性
- ApplicationContextAware 获取Spring 上下文
- Spring ApplicationContextAware获取上下文
- Spring ApplicationContextAware获取上下文
- 通过ApplicationContextAware获取spring容器中的bean
- 通过ApplicationContextAware获取spring容器中的bean
- 程序运行过程中获取Spring上下文通过ApplicationContextAware
- 通过ApplicationContextAware加载Spring上下文环境(获取bean)
- Spring,通过ApplicationContextAware获取ApplicationContext
- ApplicationContextAware获取上下文bean
- 通过ApplicationContextAware接口获取Spring配置文件中的所有Bean
- springboot 获取上下文代码 ApplicationContextAware
- Spring通过注解@Value获取properties配置
- Spring获取properties文件中的属性
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean
- 通过ApplicationContextAware获取bean .
- 通过ApplicationContextAware获取bean
- 开始想写博客了
- 数据层preclone、adcfgclone时执行adcrdb.sh出错
- IOS UIPickerView的简单使用 省份+城市 联动
- 动画系统 关于动画系统的根运动RootMotion
- mysql让远程可以连
- ApplicationContextAware获取Spring上下文,通过基类获取properties中的配置属性
- window系统查看端口被哪个进程占用了
- Mysql基础(一) mysql给root开启远程访问权限,修改root密码
- 万年历
- bat截取字符串
- 判断二进制流编码
- Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:testCompile
- 黑马程序员 -- Java基础学习(2)
- 【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!