微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.执行业务操作
  • 关闭/销毁容器

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

  • ConfigurableApplicationContext是ApplicationContext的子类

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>
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐