一篇文章带你掌握主流基础框架——Spring( 八 )

  • 使用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的方式为(类路径下的XML配置文件):
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对象只能有一个 。
容器类层次结构下面我们给出容器的层次图
一篇文章带你掌握主流基础框架——Spring

文章插图
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 ..." );}}

推荐阅读