spring-自动加载配置文件\使用属性文件注入

上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构

src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到WEB-INF下

首先看下pom.xml,需要引入一些依赖项:

 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 3     <modelVersion>4.0.0</modelVersion>
 4     <groupId>yjmyzz</groupId>
 5     <artifactId>jsf-web</artifactId>
 6     <version>1.0</version>
 7     <packaging>war</packaging>
 8
 9
10     <dependencies>
11         <!-- 单元测试 -->
12         <dependency>
13             <groupId>junit</groupId>
14             <artifactId>junit</artifactId>
15             <version>4.7</version>
16             <scope>test</scope>
17         </dependency>
18
19         <!-- jsf -->
20         <dependency>
21             <groupId>org.jboss.spec.javax.faces</groupId>
22             <artifactId>jboss-jsf-api_2.1_spec</artifactId>
23             <version>2.1.19.1.Final-redhat-1</version>
24             <scope>compile</scope>
25         </dependency>
26
27
28         <!-- spring -->
29         <dependency>
30             <groupId>org.springframework</groupId>
31             <artifactId>spring-context</artifactId>
32             <version>4.0.2.RELEASE</version>
33         </dependency>
34
35
36         <dependency>
37             <groupId>org.springframework</groupId>
38             <artifactId>spring-web</artifactId>
39             <version>4.0.2.RELEASE</version>
40         </dependency>
41
42
43         <!-- servlet支持 -->
44         <dependency>
45             <groupId>javax.servlet</groupId>
46             <artifactId>servlet-api</artifactId>
47             <version>2.5</version>
48         </dependency>
49
50     </dependencies>
51
52     <build>
53         <plugins>
54             <plugin>
55                 <artifactId>maven-compiler-plugin</artifactId>
56                 <version>3.1</version>
57                 <configuration>
58                     <source>1.7</source>
59                     <target>1.7</target>
60                 </configuration>
61             </plugin>
62             <plugin>
63                 <artifactId>maven-war-plugin</artifactId>
64                 <version>2.3</version>
65                 <configuration>
66                     <warSourceDirectory>webapp</warSourceDirectory>
67                     <failOnMissingWebXml>false</failOnMissingWebXml>
68                 </configuration>
69             </plugin>
70         </plugins>
71     </build>
72 </project>

pom.xml

 

1. 自动加载配置文件

在web项目中,可以让spring自动加载配置文件(即上图中的src/main/resouces/spring下的xml文件),WEB-INF/web.xml中参考以下设置:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3      <display-name>jsf-web</display-name>
 4
 5      <welcome-file-list>
 6        <welcome-file>index.html</welcome-file>
 7      </welcome-file-list>
 8
 9     <listener>
10      <listener-class>
11        org.springframework.web.context.ContextLoaderListener
12       </listener-class>
13     </listener>
14
15     <context-param>
16      <param-name>contextConfigLocation</param-name>
17       <param-value>
18        classpath*:spring/applicationContext-*.xml
19       </param-value>
20     </context-param>
21
22 </web-app>

web.xml

解释一下: classpath*:spring/applicationContext-*.xml 这里表示将加载classpath路径下 spring目录下的所有以applicationContext-开头的xml文件 , 通常为了保持配置文件的清爽 , 我们会把配置分成多份 : 比如 applicationContext-db.xml 用来配置DataSource , applicationContext-cache.xml用来配置缓存...等等.

 

2.代码中如何取得ApplicationContext实例

 1 package yjmyzz.utils;
 2
 3 import javax.faces.context.FacesContext;
 4 import javax.servlet.ServletContext;
 5
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.web.context.support.WebApplicationContextUtils;
 8
 9 public class ApplicationContextUtils {
10
11     public static ApplicationContext getApplicationContext() {
12         ServletContext context = (ServletContext) FacesContext
13                 .getCurrentInstance().getExternalContext().getContext();
14         ApplicationContext appctx = WebApplicationContextUtils
15                 .getRequiredWebApplicationContext(context);
16
17         return appctx;
18     }
19
20     public static <T> T getBean(Class<T> t) {
21         return getApplicationContext().getBean(t);
22     }
23 }

ApplicationContextUtils

 有了这个工具类 , 就可以方便的取得注入的Bean

 

3. 使用properties文件注入

为了演示注入效果,先定义一个基本的Entity类

 1 package yjmyzz.entity;
 2
 3 import java.io.Serializable;
 4
 5 public class ProductEntity implements Serializable {
 6
 7     private static final long serialVersionUID = -2055674628624266800L;
 8     /*
 9      * 产品编码
10      */
11     private String productNo;
12
13     /**
14      * 产品名称
15      */
16     private String productName;
17
18     /**
19      * 产品ID
20      */
21     private Long productId;
22
23     public String getProductNo() {
24         return productNo;
25     }
26
27     public void setProductNo(String productNo) {
28         this.productNo = productNo;
29     }
30
31     public String getProductName() {
32         return productName;
33     }
34
35     public void setProductName(String productName) {
36         this.productName = productName;
37     }
38
39     public Long getProductId() {
40         return productId;
41     }
42
43     public void setProductId(Long productIdLong) {
44         this.productId = productIdLong;
45     }
46
47     @Override
48     public String toString() {
49         return productId + "/" + productNo + "/" + productName;
50     }
51
52 }

ProductEntity

然后在applicationContext-beans.xml中配置以下内容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 6
 7     <bean id="propertyConfigurer"
 8         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 9         <property name="locations">
10             <list>
11                 <value>classpath:properties/*.properties</value>
12             </list>
13         </property>
14     </bean>
15
16     <bean id="productEntity" class="yjmyzz.entity.ProductEntity">
17         <property name="productId" value="${product.id}" />
18         <property name="productNo" value="${product.no}" />
19         <property name="productName" value="${product.name}" />
20         <!-- <property name="productId">
21             <bean class="java.lang.Long">
22                 <constructor-arg index="0" value="${product.id}" />
23             </bean>
24         </property>
25          -->
26     </bean>
27 </beans>

spring配置文件

注:classpath:properties/*.properties表示运行时 , spring容器会自动加载classpath\properties目录下的所有以.properties后缀结尾的文件 ,  我们在src/main/resources/properties/下放置一个product.properties属性文件 , 内容如下:

1 product.id=3
2 product.no=n95
3 product.name=phone

product.properties

该文件被spring自动加载后 , 就可以用里面定义的属性值 , 为Bean做setter属性注入 , 即配置文件中的<property name="productId" value="${product.id}" />

 

4.验证注入是否成功

在HomeController里 ,  向Spring容器要一个Bean ,  显示下它的属性:

 1 package yjmyzz.controller;
 2
 3 import javax.faces.bean.ManagedBean;
 4
 5 import yjmyzz.entity.ProductEntity;
 6 import yjmyzz.utils.ApplicationContextUtils;
 7
 8 @ManagedBean(name = "Home")
 9 public class HomeController {
10
11     public String sayHello() {
12
13         ProductEntity product = ApplicationContextUtils
14                 .getBean(ProductEntity.class);
15
16         return product.toString();
17     }
18
19 }

HomeController

index.xhtml里仍然跟上篇相同:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml"
 3       xmlns:h="http://java.sun.com/jsf/html"
 4       xmlns:f="http://java.sun.com/jsf/core"
 5       xmlns:ui="http://java.sun.com/jsf/facelets">
 6
 7 <h:head>
 8     <title>jsf-web</title>
 9 </h:head>
10 <body>
11     <h1>
12         #{Home.sayHello()}
13
14     </h1>
15 </body>
16 </html>

index.xhtml

 

最后部署到jboss上 , 运行截图如下:

 

 

时间: 2024-11-16 09:50:44

spring-自动加载配置文件\使用属性文件注入的相关文章

spring手动加载配置文件

问题描述 spring手动加载配置文件 维护一个老项目,在本地调试,想手动加载spring配置文件,但属性总是不能成功注入,请各位高手帮忙看一看,一下是配置文件 配置文件1: <?xml version="1.0" encoding="UTF-8"?> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframe

怎么实现Spring重新加载配置文件。

问题描述 如上,希望大家提供方法 解决方案 解决方案二:自己看spring文档和源代码.解决方案三: 解决方案四:修改Spring的源代码在getBean方法里增加对文件时间戳的判断如果发现时间戳晚与先前保存的则重新读取文件一次

thinkphp学习笔记9—自动加载

原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\Util\Auth类: namespace Org\Util; class Auth { } 保存到ThinkPHP/Library/Org/Util/Auth.class.php 这样我们就可以直接实例化了, new \Org\Util\Auth(); 实例化之后系统会自动加载 ThinkPHP/

大数据与机器学习:实践方法与行业案例.3.3 自动加载程序的数据库设计

3.3 自动加载程序的数据库设计 根据之前的设计,自动加载程序需要从数据库配置表中获取配置信息,并不断更新相关的状态,表3-2列出了自动加载程序需要的所有配置表. 表3-2 自动加载程序的配置表 表 名 中文名称 用 途 file_settings 数据文件信息表 存储数据文件名称.日期等配置信息 file_status 数据文件状态表 存储数据文件的状态 load_config 加载配置信息表 存储数据库中表的相关信息 ftp_server 数据缓冲区信息表 存储数据缓冲区文件服务器的相关信息

asp.net webform页面状态自动加载和保存方法 (1/2)

首先定义一个特性(attribute).我会将这个特性放到需要自动加载和保存的属性上,以便将这些需要处理的属性从所有的页面属性中筛选出来,做进一步处理.这个特性的定义如下: /// <summary> /// 自动保存属性. 能够实现字段或属性值的自动保存和加载. 该属性只在非静态字段或属性上才能生效. /// </summary> /// <remarks> /// 自动保存属性. 在页面类的属性上面加上该属性. 可以使得该字段或属性能够自动保存和自动加载. ///

PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间_php实例

PHP前言: •动态地创建属性和方法 •对象的复制 •对象的比较 •加载指定的文件 •自动加载类文件 •命名空间 示例 1.类的相关知识点 3(动态地创建属性和方法) class/class3.php <?php /** * 类的相关知识点 3(动态地创建属性和方法) */ // 用于演示如何动态地创建属性(这就是 php 中所谓的重载) class Class1 { // __set 魔术方法,当设置的属性不存在或者不可访问(private)时就会调用此函数 public function _

Spring加载配置文件

        最近在看<Spring3.0就这么简单>这本书,开发环境为IDEA+Maven,今儿写代码时,Spring加载配置文件总是失败,相当郁闷,不过还是解决了. 最初的写法是 Resource res=new ClassPathResource("classpath:com/smart/beanfactory/beans.xml"); 或者 ApplicationContext factory = new ClassPathXmlApplicationContex

Java中加载配置文件的集中方式,以及利用ClassLoader加载文件

 我们往常进行文件的加载的时候 用到的都是  FileInputStream进行 文件的加载比如下面一个例子 :  InputStream in=FileInputStream("1.properties");  Properties p=new Properties() ; p.load(int)  ;//加载输入流 获得键值对 p.getProperties(...) ;//// 我们通常都是这样来加载配置文件 .我们知道 我们在使用 第三方提供的类的时候 第三方都是以 jar包的

spring 集成quazt 后如何实现等spring容器加载完成之后自动执行一次任务?

问题描述 我的项目中使用了spring集成quazt来实现任务调度任务的功能,现在有这样一个需求,我需要通过后台任务每隔半小时统计一次业务数据,然后放到缓存中,前台页面通过实时刷新页面来从缓存中获取统计的数据,可能,当我们系统刚上线的时候调度任务还没有执行,要等到指定的时间点才执行,我现要想让系统等到spring容器加载完成后就自动执行一次,请问有什么办法吗?<bean id="refreshOldAccountTrigger" class="org.springfra