继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

冉冉说
关注TA
已关注
手记 198
粉丝 42
获赞 194

在上一篇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.ContextLoaderListener12       </listener-class>13     </listener>  14     15     <context-param>16      <param-name>contextConfigLocation</param-name>17       <param-value>18        classpath*:spring/applicationContext-*.xml19       </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) FacesContext13                 .getCurrentInstance().getExternalContext().getContext();14         ApplicationContext appctx = WebApplicationContextUtils15                 .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      * 产品ID20      */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     @Override48     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=32 product.no=n953 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 = ApplicationContextUtils14                 .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上 , 运行截图如下:

 

 

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP