ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring(二、配置文件)

2022-07-29 18:03:51  阅读:116  来源: 互联网

标签:配置文件 对象 Spring bean Bean 实例


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>
    

标签:配置文件,对象,Spring,bean,Bean,实例
来源: https://www.cnblogs.com/xmpy/p/16533103.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有