springIOC之二

    xiaoxiao2021-03-26  4

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- IOC容器的配置: 要创建的所有的对象都配置在这里--> <bean id="user" class="cn.itcast.a_hello.User" init-method="init_user" destroy-method="destroy_user" scope="singleton" lazy-init="false"></bean> </beans> App2_bean.java

    public class App2_bean { /** * 1) 对象创建: 单例/多例 * scope="singleton", 默认值, 即 默认是单例 【service/dao/工具类】 * scope="prototype", 多例; 【Action对象】 * * 2) 什么时候创建? * scope="prototype" 在用到对象的时候,才创建对象。 * scope="singleton" 在启动(容器初始化之前), 就已经创建了bean,且整个应用只有一个。 * 3)是否延迟创建 * lazy-init="false" 默认为false, 不延迟创建,即在启动时候就创建对象 * lazy-init="true" 延迟初始化, 在用到对象的时候才创建对象 * (只对单例有效) * 4) 创建对象之后,初始化/销毁 * init-method="init_user" 【对应对象的init_user方法,在对象创建之后执行 】 * destroy-method="destroy_user" 【在调用容器对象的destriy方法时候执行,(容器用实现类)】 */ @Test public void testIOC() throws Exception { // 得到IOC容器对象 【用实现类,因为要调用销毁的方法】 ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml"); System.out.println("-----容器创建-----"); // 从容器中获取bean User user1 = (User) ac.getBean("user"); User user2 = (User) ac.getBean("user"); System.out.println(user1); System.out.println(user2); // 销毁容器对象 ac.destroy(); } } User.java

    public class User { private int id; private String name; public User() { super(); System.out.println("------User对象创建------"); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void init_user() { System.out.println("创建对象之后,初始化"); } public void destroy_user() { System.out.println("IOC容器销毁,user对象回收!"); } }打印日志; 测试结果,会先去创建User()对象

    ------User对象创建------

    接着调用init_user()方法

    创建对象之后,初始化

    回到测试类中,创建容器

    -----容器创建-----

    配置文件中声明了对象为单例

    cn.itcast.a_hello.User@56f0cb3c cn.itcast.a_hello.User@56f0cb3c

    销毁容器对象,ac.destroy();调用User类的destroy_user()方法

    打印日志;

    IOC容器销毁,user对象回收!

    ============================================================================================================================

    如果scope=prototype,结果会

    信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5d352367: defining beans [user]; root of factory hierarchy -----容器创建----- ------User对象创建------ 创建对象之后,初始化 ------User对象创建------ 创建对象之后,初始化 cn.itcast.a_hello.User@63e708b2 cn.itcast.a_hello.User@54ec115b 2017-2-2 11:07:38 org.springframework.context.support.ClassPathXmlApplicationContext doClose 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@59d0d45b: startup date [Thu Feb 02 11:06:47 CST 2017]; root of context hierarchy

    转载请注明原文地址: https://ju.6miu.com/read-650251.html

    最新回复(0)