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

简介: 在上一篇jsf环境搭建的基础上 , 加入spring框架 , 先看下目录结构 src/main/resources 这个source folder 放置web项目所需的主要配置,打包时,会自动打包到WEB-INF下 首先看下pom.

上一篇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上 , 运行截图如下:

 

 

目录
相关文章
|
12月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2831 1
|
12月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
268 0
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
Java 测试技术 应用服务中间件
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
434 14
|
12月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
519 0
|
12月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
232 0
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
212 2
一键注入 Spring 成员变量,顺序编程
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
Java Spring 容器
Spring 源码解析 | populateBean 属性填充(上)
本文主要是讲 Spring 容器的启动过程主要是以题干的方式进行可能不回涉及过多的细节,希望大家阅读本文能对 Spring 源码有一个简单的了解。 环境介绍: Spring 5.3.10 Jdk 11
414 0
Spring 源码解析 | populateBean 属性填充(上)
|
Java Spring 容器
Spring 源码解析 | populateBean 属性填充(下)
本文主要是讲 Spring 容器的启动过程主要是以题干的方式进行可能不回涉及过多的细节,希望大家阅读本文能对 Spring 源码有一个简单的了解。 环境介绍: Spring 5.3.10 Jdk 11
247 0

热门文章

最新文章