文档章节

JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(12):XML配置自动扫描包,自动加载*.properties文件

o
 osc_d5exiys5
发布于 2018/07/13 16:12
字数 1246
阅读 7
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

一、XML和注解组合使用

  前几篇的测试案例都是在Java类中配置,现在换一种使用方式,在XML中配置,使Spring IoC容器在启动之后自动去扫描配置的包路径,扫描加载指定路径下的properties文件。

关键配置信息如下:

 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     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xmlns:aop="http://www.springframework.org/schema/aop"
 8     xmlns:util="http://www.springframework.org/schema/util" 
 9     xmlns:task="http://www.springframework.org/schema/task"
10     xsi:schemaLocation="
11         http://www.springframework.org/schema/beans 
12         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd   
13         http://www.springframework.org/schema/aop 
14         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd   
15         http://www.springframework.org/schema/task  
16         http://www.springframework.org/schema/task/spring-task-4.2.xsd 
17         http://www.springframework.org/schema/context 
18         http://www.springframework.org/schema/context/spring-context-4.2.xsd" >
19 </beans>

  特别说明一下:

  在Spring框架的配置文件中,xmlns代表xml的命名空间,xmlns:xsi代表当前配置xml所要遵循的标准,简而言之,下面2条是Spring配置文件的最核心也是最基本的配置。 

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="
5         http://www.springframework.org/schema/beans 
6         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd " >
7 </beans>

        当然,Spring配置文件中能够使用的标签有很多,这需要我们手动引入命名空间,然后给出xsd文件的位置。比如下面:

引入:上下文标签的命名空间

1 xmlns:context="http://www.springframework.org/schema/context"

 引入:面向切面aop相关标签的命名空间

1 xmlns:aop="http://www.springframework.org/schema/aop"

 引入:事务管理相关标签的命名空间

1 http://www.springframework.org/schema/tx

 引入:定时任务相关标签的命名空间

1 xmlns:task="http://www.springframework.org/schema/task"

 引入:加载SpringMVC框架相关标签的命名空间

1 xmlns:mvc="http://www.springframework.org/schema/mvc"

 引入:一些工具类先关标签的命名空间

1 xmlns:util="http://www.springframework.org/schema/util"

 等等..............

二、测试案例

创建一个测试配置文件:applicationContext.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     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:mvc="http://www.springframework.org/schema/mvc"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xmlns:aop="http://www.springframework.org/schema/aop"
 8     xmlns:util="http://www.springframework.org/schema/util" 
 9     xmlns:task="http://www.springframework.org/schema/task"
10     xsi:schemaLocation="
11         http://www.springframework.org/schema/beans 
12         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd   
13         http://www.springframework.org/schema/aop 
14         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd   
15         http://www.springframework.org/schema/task  
16         http://www.springframework.org/schema/task/spring-task-4.2.xsd 
17         http://www.springframework.org/schema/context 
18         http://www.springframework.org/schema/context/spring-context-4.2.xsd" >
19     <!--扫描加载指定相对路径下的所有properties文件 -->
20     <context:property-placeholder location="classpath:com/xfwl/spring/profile/*.properties" />
21     <!--将针对注解的处理器配置好 -->
22     <context:annotation-config/>
23     <!-- 自动扫描指定包中的Bean:通配符统一批量设置 -->
24     <context:component-scan base-package="com.xfwl.spring.context"/>
25     <!-- 依赖注入 -->
26     <bean id="user" class="com.xfwl.spring.profile.UserBean">
27         <property name="uname" value="${uname}"/>
28         <property name="upwd" value="${upwd}"/>
29     </bean>
30 </beans>

 创建一个Properties属性文件:user.properties 

1 #简单测试一下:用properties文件存放用户数据
2 uname=xfwl
3 upwd=123456

 创建一个POJO类:UserBean.java 

 1 package com.xfwl.spring.context;
 2 
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.context.annotation.ComponentScan;
 5 import org.springframework.stereotype.Component;
 6 
 7 public class UserBean {
 8     private String uname;
 9     private String upwd;
10     public UserBean(){}
11     public UserBean(String uname,String upwd){
12         this.uname=uname;
13         this.upwd=upwd;
14     }
15     public String getUname() {
16         return uname;
17     }
18     public void setUname(String uname) {
19         this.uname = uname;
20     }
21     public String getUpwd() {
22         return upwd;
23     }
24     public void setUpwd(String upwd) {
25         this.upwd = upwd;
26     }
27     @Override
28     public String toString() {
29         return "UserBean [uname=" + uname + ", upwd=" + upwd + "]";
30     }
31 }

  创建一个管理类:Manager.java

 1 package com.xfwl.spring.context;
 2 
 3 import org.springframework.beans.factory.BeanNameAware;
 4 import org.springframework.beans.factory.DisposableBean;
 5 import org.springframework.beans.factory.InitializingBean;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.beans.factory.annotation.Qualifier;
 8 import org.springframework.context.annotation.Bean;
 9 import org.springframework.context.annotation.ComponentScan;
10 import org.springframework.context.annotation.Configuration;
11 import org.springframework.stereotype.Component;
12 @Component("manager")
13 public class Manager{
14     @Autowired
15     private UserBean user;
16     /****setter******/
17     public void setUser(UserBean user) {
18         this.user = user;
19     }
20     public void manage(){
21         System.out.println(this.user.toString());    
22     }
23 }

  创建一个测试类:TestBean.java

 1 package com.xfwl.spring.context;
 2 import java.sql.SQLException;
 3 
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 public class TestBean {
 6     //项目相对路径:ClassPathXmlApplicationContext/ApplicationContext
 7     private static final String xmlRelPath="com/xfwl/spring/profile/applicationContext.xml";
 8     public static void main(String[] args) throws SQLException {
 9         //拿到解析对象
10         ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext(xmlRelPath);
11         //开始测试
12         Manager manager=(Manager)ctx.getBean("manager");
13         manager.manage();
14     }
15 }

  测试结果:(XML+注解同时被正常使用

1 log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
2 log4j:WARN Please initialize the log4j system properly.
3 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
4 UserBean [uname=xfwl, upwd=123456]

 最后补充一点:除了在XML中配置加载properties文件,也可以使用注解加载properties文件,比如下面代码:

 1 package com.xfwl.spring.profile;
 2 
 3 import org.springframework.beans.factory.annotation.Value;
 4 import org.springframework.context.annotation.ComponentScan;
 5 import org.springframework.context.annotation.PropertySource;
 6 import org.springframework.stereotype.Component;
 7 import org.springframework.test.context.ContextConfiguration;
 8 @ContextConfiguration
 9 @PropertySource(value={"classpath:com/xfwl/spring/profile/*.properties"},
10                 ignoreResourceNotFound=true)
11 public class UserBean {
12     @Value("${tom.uname}")
13     private String uname;
14     @Value("${tom.upwd}")
15     private String upwd;
16     public UserBean(){}
17     public UserBean(String uname,String upwd){
18         this.uname=uname;
19         this.upwd=upwd;
20     }
21     public String getUname() {
22         return uname;
23     }
24     public void setUname(String uname) {
25         this.uname = uname;
26     }
27     public String getUpwd() {
28         return upwd;
29     }
30     public void setUpwd(String upwd) {
31         this.upwd = upwd;
32     }
33     @Override
34     public String toString() {
35         return "UserBean [uname=" + uname + ", upwd=" + upwd + "]";
36     }
37 }

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
记一次失败的Perl + Nginx + FastCGI 配置过程

这两天心血来潮,不知道为什么和 Perl + Nginx + FastCGI 配置 耗上了。但是失败了,记录如下: 1)安装Nginx 1.4.3 ,我的是WINDOWS 7 系统,修改配置文件如下: location ~ .(pl|cgi|perl)?...

通吃岛-低手哥
2013/10/27
1.7K
7
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6.1K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
679
1
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3

没有更多内容

加载失败,请刷新页面

加载更多

SQL 语句大全

点击上方“掌上编程”,选择“置顶或者星标” 优质文章第一时间送达! 一、基础 「1、说明:创建数据库」 CREATE DATABASE database-name    「2、说明:删除数据库」 drop database ...

GeneralMa
昨天
0
0
山东创睦网络科技有限公司:使用Python爬取全球新冠肺炎疫情数据

使用Python爬取全球新冠肺炎疫情数据 导入所需库包 获取实时数据的url 正式编写程序 查看输出结果 导入所需库包 在获取数据之前,我们需要先安装好所需的包requests和pandas: 1.如果是使用p...

osc_qv1fwke0
32分钟前
14
0
如何1年获得别人3年的工作经验(深度好文)

最近有同学问我,为什么你的工作年限不长,技术却这么厉害,我笑了笑,啥也没说。 我不是不想回答,是不知道怎么回答。在他们的定位可能就是,每方面都懂一点,遇到问题能够快速解决,就是比...

zhang_rick
今天
1
0
新基建带动行业

什么是“新基建”? 什么是“新基建”? 根据央视发布的信息来看,其涵盖了5G基站建设、新能源汽车充电桩、大数据中心、人工智能、工业互联网,特高压,城际以及城轨交通,涉及了七大领域和相...

osc_anefoz50
33分钟前
8
0
怕入错行?这群技术人写了本“择业指南”

计算机专业好找工作吗?哪些方向是当前的主流和热门方向呢? 计算机专业的你是不是还在为职业发展纠结犹豫呢? 刚经历完高考选专业的你是不是还在迷茫徘徊呢? 那么福利来啦! 《软件技术职业...

阿里云云栖号
33分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部