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:指对象的作用范围,取值如下:

取值范围 说明
singleton 默认值,单例的 (默认
prototype 多例的
request WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中
session WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中
global session WEB 项目中,应用在 Portlet 环境,如果没有 Portlet 环境那么globalSession 相当 于 session

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>
    

image-20220729172805455.png

(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>
    
posted @   大三的土狗  阅读(874)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示