写点什么

Spring(二、配置文件)

作者:
  • 2022 年 8 月 06 日
  • 本文字数:1722 字

    阅读完需:约 6 分钟

Spring(二、配置文件)

Spring 配置文件

​ Spring 配置文件是用于指导 Spring 工厂进行 Bean 生产、依赖关系注入(装配)及 Bean 实例分发的"图纸"。Java EE 程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。Spring 配置文件是一个或多个标准的 XML 文档,applicationContext.xml 是 Spring 的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。



1.Bean 标签基本配置

  • 用于配置对象交由 Spring 来创建。

  • 默认情况下它调用的是类中的无参构造函数。

  • 如果没有无参构造函数则不能创建成功。

  • 基本属性:

  • id:Bean 实例在 Spring 容器中的唯一标识 (不能重复

  • class:Bean 的全限定名称


  <!-- 创建applicationContext.xml -->      <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl">        </bean>
复制代码

2.Bean 标签范围配置

scope:指对象的作用范围,取值如下:


1)当 scope 的取值为 singleton 时


  • Bean 的实例化个数:1 个

  • Bean 的实例化时机:当 Spring 核心文件被加载时,实例化配置的 Bean 实例

  • Bean 的生命周期:

​ 对象创建:当应用加载,创建容器时,对象就被创建了

​ 对象运行:只要容器在,对象一直活着

​ 对象销毁:当应用卸载,销毁容器时,对象就被销毁了


  • 测试

applicationContext.xml (scope="singleton")


   <!-- 创建applicationContext.xml -->    <bean id="userDao" class="com.xmp.dao.impl.UserDaoImpl" scope="singleton"> <!-- singleton单例 默认-->
</bean>
复制代码


测试,打印实例化的对象发现一样


  @Test    //测试scope的作用域    public void test() {        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");        UserDao userDao1 = (UserDao) context.getBean("userDao");        UserDao userDao2 = (UserDao) context.getBean("userDao");
System.out.println(userDao1); System.out.println(userDao2);
}
复制代码


测试结果:



2)当 scope 的取值为 prototype 时


  • Bean 的实例化个数:多个

  • Bean 的实例化时机:当调用 getBean()方法时实例化 Bean

  • Bean 的生命周期:


​ 对象创建:当使用对象时,创建新的对象实例


​ 对象运行:只要对象在使用中,就一直活着


​ 对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了


  • 测试


当测试 scope 的作用域改为 prototype 时:



3.Bean 生命周期配置

3.1 init-method:

​ 指定类中的初始化方法名称


 //初始化方法,在实例化对象的时候调用    public void init() {        System.out.println("UserDaoImpl init ......");    }
复制代码

3.2 destroy-method:

指定类中销毁方法名称


  //销毁方法,在销毁对象的时候调用    public void destroy() {        System.out.println("UserDaoImpl destroy ......");    }
复制代码


(1)关于 Spring 中对 bean 生命周期控制提供了两种方式:


  • 在配置文件中的 bean 标签中添加init-methoddestroy-method属性

  • 类实现InitializingBeanDisposableBean接口,这种方式了解下即可。


   <!-- 创建applicationContext.xml -->      <bean id="userDao"       class="com.xmp.dao.impl.UserDaoImpl"       scope="prototype"           init-method="init"       (告诉Spring执行该方法)      destroy-method="destroy"  (告诉Spring执行该方法)      >        </bean>
复制代码



(2)对于 bean 的生命周期控制在 bean 的整个生命周期中所处的位置如下:


  • 初始化容器

  • 1.创建对象(内存分配)

  • 2.执行构造方法

  • 3.执行属性注入(set 操作)

  • ==4.执行 bean 初始化方法==

  • 使用 bean

  • 1.执行业务操作

  • 关闭/销毁容器

  • ==1.执行 bean 销毁方法==


(3)关闭容器的两种方式:


  • ConfigurableApplicationContext 是 ApplicationContext 的子类

  • close()方法

  • registerShutdownHook()方法

4.Bean 实例化三种方式

  • 无参构造方法实例化 (常用)

  • 工厂静态方法实例化


  <!--静态工厂-->  <bean id="userDaoFactory" class="com.xmp.Factory.StaticFactory" factory-method="getUserDao"> </bean>
复制代码


  • 工厂实例方法实例化 FactoryBean(实用)


  <!--实例工厂-->  <bean id="Factory" class="com.xmp.Factory.DynamicFactory"></bean>  <bean id="userDaoFactoryDynamic" factory-bean="Factory" factory-method="getUserDao"></bean>
复制代码


发布于: 刚刚阅读数: 4
用户头像

关注

在校大三学生一枚 2022.08.02 加入

喜欢学习编程,擅长技术栈JAVA

评论

发布
暂无评论
Spring(二、配置文件)_开源_斯_InfoQ写作社区