spring学习 十六 spring加载属性文件
第一步:创建一个properties文件,以数据库链接作为实例db.properties
jdbc.url=jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=com.mysql.jdbc.Driver
jdbc.password=123456
第二步在spring配置文件加入context的约束,并使用<context:property-placeholder/>标签加载配置文件,多个配置文件用逗号隔开
<context:property-placeholder location="classpath:applicationContext.xml"/>
第三步把db.properties文件中的内容读入到 封装数据的类的属性中
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
第四步:根从配置文件中读入的数据源,配置一个sqlSessionFactory bean
<!-- 配置sqlSessionFactory -->
<!-- sqlSessionFactory ,注册sqlSession工厂-->
<bean id="sessionFactory">
<!--dataSource的类型是DataSource是一个接口,上面配置的DriverManagerDataSouce类实现了DataSource接口 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 设置别名 -->
<property name="typeAliasesPackage" value="com.spring.pojo"></property>
</bean>
第五步:配置一个用于扫描mybatis 的mapper.xml的配置文件以及扫描xxxMapper.java接口的扫描器,目的是利用cglib动态代理生成实现xxxMapper.java接口的类
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.spring.mapper" ></property>
<!-- <property name="sqlSessionFactory" ref="factory"></property> -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean>
此时要注意一个问题就是在配置mybatis扫描mapper文件时,需要注意,不要使用MapperScannerConfigurer类的sqlSessionFactory属性,使用sqlSessionFactoryBeanName属性。因为使用sqlSessionFactory属性,这个属性要求注入的是一个实例化的bean,因为采用的是读取配置文件,此时数据源只是刚读取到内容还没有实例化SqlSessionFactory工厂对象,因此无法对sqlSessionFactory属性进行注入,会包bean不存在错误,而sqlSessionFactoryName,此时MapperScannerConfigurer类只要求注入一个字符串即可——也就是只要传入一个bean的id就行,后续需要的时在注入。原因就是加载配置文件比较晚,SqlSessionFactory中的好多属性还没有被注入
在被Spring管理的类中的属性,可以通过@Value(“${key}”)取出properties文件中的内容来对被spring管理的类的属性赋值
(1) 添加注解扫描
<context:component-scan base-package="com.bjsxt.service.impl"></context:component-scan>
(2)在类中添加 key 和变量名可以不相同,变量类型任意,只要保证 key 对应的 value 能转换成这个类型就可以.
@Value("${my.demo}")
private String test;
spring学习 十六 spring加载属性文件的更多相关文章
- Spring学习(十六)----- Spring AOP实例(Pointcut(切点),Advisor)
在上一个Spring AOP通知的例子,一个类的整个方法被自动拦截.但在大多数情况下,可能只需要一种方式来拦截一个或两个方法,这就是为什么引入'切入点'的原因.它允许你通过它的方法名来拦截方法.另外, ...
- Spring学习笔记(1)——资源加载
<!-- 占坑,迟点补充底层原理 --> Spring支持4种资源的地址前缀 (1)从类路径中加载资源——classpath: classpath:和classpath:/是等价的,都是相 ...
- Spring MVC(十六)--Spring MVC国际化实例
上一篇文章总结了一下Spring MVC中实现国际化所需的配置,本文继上一文举一个完整的例子,我选择用XML的方式.我的场景是这样的: 访问一个页面时,这个页面有个表格,对表头中的列名实现国际化. 第 ...
- Spring学习十五----------Spring AOP API的Pointcut、advice及 ProxyFactoryBean相关内容
© 版权声明:本文为博主原创文章,转载请注明出处 实例: 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4. ...
- Spring学习十四----------Spring AOP实例
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- Spring学习(十九)----- Spring与WEB容器整合
首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> ...
- pgloader 学习(六) 加载csv 数据
关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso- ...
- JAVA 中加载属性文件的4种方法
小总结 : 这个集合属性可以反序列化, 把持久化数据读出来, 输入流中放入要操作的文件! p.load加载这个输入流! p.getProperty( key) 根据这个键获得值! 补充 : web工程 ...
- Java动态加载属性文件.properties
当我们使用如下语句加载.properties时: ClassLoader classLoader = this.getClass().getClassLoader(); Properties prop ...
随机推荐
- SoundChannel和soundTransform的关系
SoundChannel 音乐的 播放 暂停 当前获取当前位置 长度 leftPeak : Number[只读] 左声道的当前幅度(音量),范围从 0(静音)至 1(最大幅度) rightPe ...
- 使用FFMPEG类库分离出多媒体文件中的H.264码流
在使用FFMPEG的类库进行编程的过程中,可以直接输出解复用之后的的视频数据码流.只需要在每次调用av_read_frame()之后将得到的视频的AVPacket存为本地文件即可. 经试验,在分离MP ...
- Codeforces Beta Round #61 (Div. 2)
Codeforces Beta Round #61 (Div. 2) http://codeforces.com/contest/66 A 输入用long double #include<bit ...
- f5源站获取http/https访问的真实源IP解决方案
1.背景 F5负载均衡设备,很多场景下需要采用旁挂的方式部署.为了保证访问到源站的数据流的request和response的TCP路径一致,f5采用了snat机制.但是这样导致源站上看到的来源IP都是 ...
- swift - 3D 视图,截图,关键字搜索
1.xib 上的 3D效果 按钮 2. import UIKit //1.导入框架 import MapKit class ViewController: UIViewController { @IB ...
- swift 4.2 - 根据字符串 push指定控制器
俩个方法 1. 创建类写成 类方法 import UIKit /* * 注释:获得VC * 1.字符串 和使用的控制器,直接跳转 * 2.用过字符串获得对应VC */ class JYGetPushV ...
- java 基础之--传统网络编程
什么是socket ? socket 是连接运行在网络上的两个程序间的双向通讯端点 服务器将某一套接字绑定到一个特定的端口,并通过这一套接字等待和监听客户端的的连接请求 客户端通过这个端口与服务器进行 ...
- java_13.1 javaAPI
1 API概念 API:是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节.2 String类的概念和不变性 Stri ...
- Android View 深度分析requestLayout、invalidate与postInvalidate
前言 前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流 ...
- background 和渐变 总结
一,background-position:(图片定位) 三种写法: 1):按%比,左上角最小(0%,0%),右下角最大(100%,%100): 2):(x,y)左上角最小(0,0),右下角最大(ma ...