- 使用context命名空间,加载指定properties文件
<!--2.使用context空间加载properties文件--><context:property-placeholder location="jdbc.properties"/>
- 使用${}读取加载的属性值
<!--3.使用属性占位符${}读取properties文件中的属性--><!--说明:idea自动识别${}加载的属性值,需要手工点击才可以查阅原始书写格式--><bean class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="https://www.huyubaike.com/biancheng/${jdbc.driver}"/><property name="url" value="https://www.huyubaike.com/biancheng/${jdbc.url}"/><property name="username" value="https://www.huyubaike.com/biancheng/${jdbc.username}"/><property name="password" value="https://www.huyubaike.com/biancheng/${jdbc.password}"/></bean>
除了上述的基本操作,我们在context命名空间的使用中有很多需要注意的点:- 不加载系统属性
<!--因为我们的系统属性优先级>定义优先级,当我们properties中的属性与系统设置属性名相同时 , 会优先匹配系统属性导致错误可以采用system-properties-mode进行设置--><context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
- 加载多个properties文件
<!--我们可以采用逗号或空格分隔加载多个properties文件--><context:property-placeholder location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
- 加载所有properties文件
<!--我们可以采用通配符来设置加载文件用*来代替所有前缀,只保留后缀为properties即可--><context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
- 加载properties文件标准格式
<!--我们通常以classpath表示路径 , 下述形式更为标准classpath:*.properties:设置加载当前工程类路径中的所有properties文件--> <context:property-placeholder location="classpath:*.properties" system-properties-mode="NEVER"/>
- 从类路径或jar包中搜索并加载properties文件
<!--我们通常以classpath*来表示路径来源classpath*:*.properties:设置加载当前工程类路径和当前工程所依赖的所有jar包中的所有properties文件--><context:property-placeholder location="classpath*:*.properties" system-properties-mode="NEVER"/>
核心容器前面已经完成bean与依赖注入的相关知识学习,接下来我们主要学习的是IOC容器中的核心容器 。这里所说的核心容器,大家可以把它简单的理解为ApplicationContext , 接下来我们从以下几个问题入手来学习下容器的相关知识:
- 如何创建容器?
- 创建好容器后,如何从容器中获取bean对象?
- 容器类的层次结构是什么?
- BeanFactory是什么?
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
除了上面这种方式 , Spring还提供了另外一种创建方式为(文件的绝对路径):ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml");
Bean的三种获取方式方式一,就是目前案例中获取的方式:BookDao bookDao = (BookDao) ctx.getBean("bookDao");
这种方式存在的问题是每次获取的时候都需要进行类型转换方式二:
【一篇文章带你掌握主流基础框架——Spring】
BookDao bookDao = ctx.getBean("bookDao",BookDao.class);
这种方式可以解决类型强转问题,但是参数又多加了一个 , 相对来说没有简化多少 。方式三:
BookDao bookDao = ctx.getBean(BookDao.class);
这种方式就类似我们之前所学习依赖注入中的按类型注入 。必须要确保IOC容器中该类型对应的bean对象只能有一个 。容器类层次结构下面我们给出容器的层次图
文章插图
BeanFactory的使用使用BeanFactory来创建IOC容器的具体实现方式为:
public class AppForBeanFactory {public static void main(String[] args) {Resource resources = new ClassPathResource("applicationContext.xml");BeanFactory bf = new XmlBeanFactory(resources);BookDao bookDao = bf.getBean(BookDao.class);bookDao.save();}}
为了更好的看出BeanFactory和ApplicationContext之间的区别,在BookDaoImpl添加如下构造函数:public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("constructor");}public void save() {System.out.println("book dao save ..." );}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 怎么玩军棋(军棋新手教程)
- ipad怎么打开分屏(ipad怎么分屏打游戏)
- ipad分屏怎么恢复(ipadair2能不能分屏)
- ipad如何打开分屏模式(ipad分屏取消的方法)
- ipad分屏怎么打开(ipad第九代分屏功能)
- ipad如何设置分屏(ipad九代分屏操作方法)
- iPad分屏怎么用(ipadpro怎么分屏)
- ipad如何左右分屏(ipad第五代可以分屏吗)
- 手机指南针怎么看(指南针怎么看方向)
- 指南针怎么看方向(指南针罗盘)