在Spring初始化时,可以使用Properties配置器把properties文件装载到Spring的上下文中。
...
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=“http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd”
...
<context:property-placeholder location="classpath:dataSource.properties" />
这样在Spring的配置文件中可以用表达式来获得load进来的properties内容,例如:
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
有时候我们在程序中也需要用到这些配置,那么如何取值,显然不能使用${}方式的。
这时要决定用什么方式来获取properties了,最方便的当然是直接读取文件,此处省略。
如果程序一定要用通过Spring加载的properties,那么我们首先要得到Context了。
1、FileSystemXmlApplicationContext——从指定的目录中加载:
ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");
2、ClassPathXmlApplicationContext——从classpath路径加载:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
3、参照http://blog.csdn.net/dqatsh/article/details/3469278, 通过web.xml来获取Context。
4、在servlet中获取。
ServletContext servletContext = servlet.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
然后可以通过相应的bean去访问需要的properties(spring配置文件中${}方式设置到bean里)的值,这里不记录。
用PropertyPlaceholderConfigurer在加载上下文的时候暴露properties
<bean id="configBean"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>hello.properties</value>
</property>
</bean>
表明PropertyPlaceholderConfigurer是承担properties读取任务的类。
下面的类继承PropertyPlaceholderConfigurer,通过重写processProperties方法把properties暴露出去了。
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
public class CustomizedPropertyConfigurer extends PropertyPlaceholderConfigurer {
private static Map<String, Object> ctxPropertiesMap;
@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactory,
Properties props)throws BeansException {
super.processProperties(beanFactory, props);
//load properties to ctxPropertiesMap
ctxPropertiesMap = new HashMap<String, Object>();
for (Object key : props.keySet()) {
String keyStr = key.toString();
String value = props.getProperty(keyStr);
ctxPropertiesMap.put(keyStr, value);
}
}
//static method for accessing context properties
public static Object getContextProperty(String name) {
return ctxPropertiesMap.get(name);
}
}
这样此类即完成了PropertyPlaceholderConfigurer的任务,同时又提供了上下文properties访问的功能。
于是在Spring配置文件中把PropertyPlaceholderConfigurer改成CustomizedPropertyConfigurer
<!-- use customized properties configurer to expose properties to program -->
<bean id="configBean"
class="com.payment.taobaoNavigator.util.CustomizedPropertyConfigurer">
<property name="location" value="classpath:dataSource.properties" />
</bean>
最后在程序中我们便可以使用CustomizedPropertyConfigurer.getContextProperty()来取得上下文中的properties的值了。
分享到:
相关推荐
服务引导应用程序上下文是Spring Cloud的特色之一,它允许应用程序在启动时进行微服务的引导。开发者可以利用应用程序上下文层次结构来组织和配置微服务,改变引导位置以适应不同的部署需求。 此外,Spring Cloud...
1. **Spring 上下文**: 在集成中,我们需要将 Netty 服务器配置到 Spring 的上下文中,这样可以通过 Spring 管理 Netty 的生命周期,如启动、停止等。这可以通过创建一个 `ApplicationContext` 并在其内部注册 Netty...
- **Spring Cloud 上下文**:指的是一种应用程序上下文服务,它可以被用来初始化、管理和销毁应用程序中的组件。Spring Cloud 提供了一系列的自动配置来简化这一过程。 - **引导应用程序上下文**:是指应用程序启动...
文档中提到了Spring Cloud上下文,这涉及应用程序上下文的管理,包括服务引导应用程序上下文。应用程序上下文层次结构可以改变引导位置,也就是说,Spring Cloud允许开发者通过配置改变应用程序上下文启动的优先级。...
3. `org.springframework.context`:这是Spring的核心模块,提供了上下文容器,管理Bean的生命周期和依赖关系。在这个模块中,我们可以深入理解BeanFactory和ApplicationContext的区别,以及如何自定义bean的初始化...
它是Spring应用上下文的基础,包含了所有业务对象和服务的配置。 通过这些配置文件的组合,我们可以构建出一个完整的Spring驱动的JavaWeb应用,涵盖了从数据访问到业务逻辑,再到用户界面的完整流程。Spring的这些...
在这里,我们设置了应用的显示名称和描述,定义了ServletContext初始化参数,如log4j配置位置和Spring上下文配置的位置。此外,还配置了字符编码过滤器以确保数据不出现乱码问题。最后,配置了Spring Security过滤器...
1. **Spring Cloud上下文**:包括应用程序上下文服务的引导,应用程序上下文层次结构的建立,以及改变引导位置。例如,可以覆盖远程的Properties值,自定义引导配置和属性源。此外,还讨论了环境变化时刷新的范围和...
2. **applicationContext.xml**:此文件通常用于定义整个应用上下文,包含所有bean的定义,是Spring应用的主配置文件。 3. **web.xml**:虽然不是Spring框架的一部分,但在Spring MVC应用中,它是部署描述符,用于...
* Spring Cloud 上下文:应用程序上下文服务引导 * 应用程序上下文层次结构:改变引导位置、Properties 覆盖远程 Properties 的值 * 自定义引导配置:自定义引导属性源、环境变化刷新范围 * 加密和解密端点:用于...
该框架的核心优势在于其高度的可配置性和灵活性,它通过一组可在Spring应用上下文中配置的Bean,利用Spring的IoC(依赖注入)和AOP(面向切面编程)特性,为应用提供声明式安全访问控制功能。 Spring Security覆盖...
如`org.springframework.beans`, `org.springframework.context`, `org.springframework.orm`, `org.springframework.jdbc`等,这些都是Spring框架的重要组成部分,用于处理bean管理、上下文、ORM(对象关系映射)和...
- **引导应用程序上下文**:描述了如何通过配置文件(如`application.yml`或`application.properties`)初始化Spring应用程序上下文。 - **应用程序上下文层次结构**:阐述了Spring Cloud如何支持不同级别的上下文...
在这个项目中,`src`目录下可能包含了测试代码,测试类可能使用了`@RunWith(SpringRunner.class)`和`@SpringBootTest`注解来启动Spring应用上下文,然后使用`@Autowired`注解注入需要测试的服务,配合`@Test`注解...
3. `spring-context-4.0.xsd`:这个DTD文件关注于Spring上下文,它扩展了bean配置,引入了事件监听、国际化、资源处理、AOP等高级特性。如`<context:component-scan>`用于自动扫描并注册bean,`...
Spring的内部bean是指在另一个bean的属性中定义的bean,它仅在包含它的外部bean的上下文中存在。 22、什么是spring装配。 Spring装配是指将对象组装到一起,并设置它们之间的依赖关系的过程。 23、自动装配有哪些...
5. `org`:此目录很可能包含了Spring框架相关的源代码组织结构,Spring框架的代码通常按照功能模块进行组织,如`org.springframework.context`对应上下文模块,`org.springframework.web`对应Web相关的支持。...
4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...
ApplicationContext提供了更丰富的上下文环境,如事件发布、国际化、资源加载等功能。它允许开发者在运行时获取bean,并且能够处理更加复杂的bean关系,如AOP(Aspect Oriented Programming,面向切面编程)。 4. *...
7. `config.xml`:这是Spring应用上下文的主要配置文件,包含了bean的定义和其他配置信息。开发者在此文件中声明服务、数据源、事务管理器等,定义bean的依赖注入。 8. `conf`:通常是一个包含其他配置文件的目录,...