配置文件,我以两种为例,一种是引入Spring的XML文件,另外一种是.properties的键值对文件;

一。引入Spring XML的注解是@ImportResource

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ImportResource

@ImportResource有三个属性,value、locations、reader,准确来说是两个,locations和value属性是一样的,都是接受字符串数组,代表导入文件的位置;reader是代表Spring解析文件的类,Spring支持XML或者groovy方式的文件解析,默认的XML解析的reader对象为XmlBeanDefinitionReader的doLoadBeanDefinitions方法;

用法就像下面这样:当然如果不是Spring注解的容器AnnotationConfigApplicationContext,同样可以使用@ImportResource注解,只要开启了注解扫描,并且标注的类已经被Spring管理到了(比如标注了注解@Component等  或者 XML中定义过该bean)

@ImportResource(locations= {"com/lvbinbin/pack1/spring.xml"})
public class AppConfig {
public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
String[] names = ac.getBeanDefinitionNames();
for (String string : names) {
System.out.println(string+" , "+ac.getBean(string));
}
}
}

简而言之,使用@ImportResource生效两个条件,一是开启包扫描 ,当然别的配置也有这种功能,只要满足注册了ConfigurationClassPostProcessor 这个BPP对象,如果不知道有没有这个bean,用上面的方式查看容器中所有的bean有没有这个bean就能知道;

    二是@ImportResource标注的类已经是个bean,被Spring管理到了,上面输出所有bean的方式就可以查看;

二。引入properties文件的注解有一种是 @PropertySource

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource

先来介绍@PropertySource的用法

jdbc.properties

jdbcDriver=com.mysql.jdbc.Driver
userName=root
userName_zh=吕彬彬
userName_en=lvbinbin

配置类  当然这个注解是标注在类上的,但是不一定要只能标注在@Configuration注解的类上,只要被Spring管理到的Bean都是可以标注的,然后使用@Value("${}")的方式注入的; 只要PropertySource的文件引入一次,该Spring容器中bean都可以使用@Value来设置属性;

@Configuration
@PropertySource(value= {"pack5/jdbc.properties"})
public class ConfigA { @Value("${jdbcDriver}")
private String jdbcName; @Value("${userName_zh}")
private String userName; public static void main(String[] args) {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConfigA.class);
System.out.println(ac.getBean(ConfigA.class).jdbcName);
System.out.println(ac.getBean(ConfigA.class).userName);
MutablePropertySources mps = ac.getEnvironment().getPropertySources();
mps.forEach(ps->{System.out.println(ps.getName());});
}
}

查看结果:   也验证了这种方式可以注入属性;  下面三行输出就是environment对象中的propertySources集合里已经有的propertySource; 其中最后一行就是这个jdbc.propertySource的name,这是Spring默认生成规则生成的;如果不满意,可以按照下面的方式来生成自定义;

修改注解@PropertySource里的name属性:

@PropertySource(value= {"pack5/jdbc.properties"},name="mysqlJdbcProperties")

测试结果就显示成为这样:

这样@PropertySource的属性说明: 1. name就是该配置文件对应的properySource的name值,你要说用处嘛? 可以通过如下方式指定propertySource的name值来获取配置文件中的键值对;

String res = (String) ac.getEnvironment().getPropertySources().get("mysqlJdbcProperties").getProperty("userName_zh");

                2. value就是配置文件的位置,字符串数组,支持Spring的多种资源写法,classpath、file等;

                3. ignoreResourceNotFound 属性  默认是false,当配置文件不存在的时候,就会抛出异常;true代表没有该文件也没有问题;建议默认即可,这样缺少配置文件时候能够发现问题所在;因为${}这种解析方式 比如键 值不存在,会原样的字符串返回;

                4. encoding 属性就是编码,默认是UTF-8;具体使用效果我也看不出来,如果引入properties文件乱码了,不妨试试修改该属性;

此外,SpringEl表达式也是可以注入属性的,简单介绍下使用方式:其中 environment 是Spring容器中的环境对象的名字,后面直接跟需要的属性,就会遍历PropertySources对象去寻找;

@Value("#{environment['userName_en']}")
private String userNameEn;

查看输出

lvbinbin

查看Spring日志,证明了这一点;不过我觉得还是 ${}更容易理解一点

Spring 注解方式引入配置文件的更多相关文章

  1. Spring注解式与配置文件式

    http://tom-seed.iteye.com/blog/1584632 Spring注解方式bean容器管理 1.通过在配置文件中配置spring组件注入 <context:compone ...

  2. spring注解方式在一个普通的java类里面注入dao

    spring注解方式在一个普通的java类里面注入dao @Repositorypublic class BaseDaoImpl implements BaseDao {这是我的dao如果在servi ...

  3. (转)使用Spring注解方式管理事务与传播行为详解

    http://blog.csdn.net/yerenyuan_pku/article/details/52885041 使用Spring注解方式管理事务 前面讲解了怎么使用@Transactional ...

  4. mybaits的注解方式与配置文件方式比较

    注解方式比配置文件方式简单了更多. 俩种配置 一个是制定配置文件路径,一个直接class指向dao层接口 只需加一个注解@**** 就能够实现 比写一个xml的配置文件简单更多.

  5. Spring 注解方式 实现 IOC 和 DI

    注:以下所有测试案例(最后一个除外)的测试代码都是同一个: package cn.tedu.test; import org.junit.Test; import org.springframewor ...

  6. 基于已构建S2SH项目配置全注解方式简化配置文件

    如果还不熟悉s2sh项目搭建的朋友可以先阅读 eclipse环境下基于tomcat-7.0.82构建struts2项目 eclipse环境下基于已构建struts2项目整合spring+hiberna ...

  7. spring注解注入properties配置文件

    早期,如果需要通过spring读取properties文件中的配置信息,都需要在XML文件中配置文件读取方式. 基于XML的读取方式: <bean class="org.springf ...

  8. Spring注解方式配置说明

    1.<context:annotation-config/>与<context:component-scan base-package=”XX.XX”/> 在基于主机方式配置S ...

  9. ActiveMQ学习总结(10)——ActiveMQ采用Spring注解方式发送和监听

    对于ActiveMQ消息的发送,原声的api操作繁琐,而且如果不进行二次封装,打开关闭会话以及各种创建操作也是够够的了.那么,Spring提供了一个很方便的去收发消息的框架,spring jms.整合 ...

随机推荐

  1. codeforces 434D

    题意:有n<=50个点,每个点有xi有[li, ri]种取值,-100 <= li <= ri <= 100,并且给定m<=100条边,每条边为u,v,d表示xu< ...

  2. await和async在C#一般处理程序(ashx)中的使用

    public class hello : HttpTaskAsyncHandler, IReadOnlySessionState { public IFetchServise fetch { get; ...

  3. C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符 那么具体是包括哪些符号不能作为文件名? Tilde (~) Numbe ...

  4. C# 动态创建SQL数据库(一)

    最近在做项目中要求能够要求动态添加数据库并建表.具体思路如下 1 提供数据名,根据数据库创建数据库 2 自定数据库与数据表,提供数据表自定与数据类型创建表 创建sqlhelper类,用于数据库操作 u ...

  5. Unity 环境区域网格化

    在使用A星算法和物体布局的过程中,常常会使用的网格的概念,即建立在网格的基础上,会使得游戏的相关编程变得简单的多. 格子的代码: using System.Collections; using Sys ...

  6. 【转】「Chris Richardson 微服务系列」微服务架构的优势与不足

    Posted on 2016年5月4日 编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战. 作者介绍:Chris Ric ...

  7. python3 os.path.realpath(__file__) 和 os.path.cwd() 方法的区别

    python3 os.path.realpath(__file__) 和 os.path.cwd() 方法的区别 os.path.realpath 获取当前执行脚本的绝对路径. os.path.rea ...

  8. 《Python自动化运维之路》 业务服务监控(二)

    文件内容差异对比方法 使用diffie模块实现文件内容差异对比.dmib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux下的di ...

  9. mysql查询语句分析 explain/desc用法

    explain或desc显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. explain 数据表 或 desc 数据表 显示数据表各字段含义 ...

  10. Linux巩固记录(9) keepalived+nginx搭建高可用负载分发环境

    环境准备(继续服用hadoop节点) slave1  192.168.2.201(CentOs 7) slave2  192.168.2.202(CentOs 7) slave1 和 slave2 上 ...