Spring--Bean创建细节

作者: Mr_欢先生 | 来源:发表于2017-06-24 18:45 被阅读128次

一.对象创建单例/多例

scope="singleton", 默认值, 即 默认是单例 【service/dao/工具类】
scope="prototype", 多例; 【Action对象】

读取创建user对象:

public class Test2 {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
    @Test
    public void test1(){
        User user = (User) applicationContext.getBean("user");
        User user2 = (User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println(user2);
    }
}
  • 1.单例配置文件:
<bean id="user" class="com.huan.Bean.User" scope="singleton"></bean>
image.png
  • 2.多例配置文件
<bean id="user" class="com.huan.Bean.User" scope="prototype"></bean>

二.什么时候创建?

scope="singleton" 单例 在启动(容器初始化之前), 就已经创建了bean,且整个应用只有一个。
scope="prototype" 多例 在用到对象的时候,才创建对象。

  • 1.单例配置文件(容器创建之前就已经创建):
<bean id="user" class="com.huan.Bean.User" scope="singleton"></bean>
  • 2.多例配置文件()
<bean id="user" class="com.huan.Bean.User" scope="prototype"></bean>

三 是否延迟创建

lazy-init="false" 默认为false, 不延迟创建,即在启动时候就创建对象
lazy-init="true" 延迟初始化, 在用到对象的时候才创建对象(只对单例有效)

  • 1.单例配置文件(容器创建之前就已经创建):
 <bean id="user" class="com.huan.Bean.User" scope="singleton" lazy-init="true"></bean>
image.png

四. 创建对象之后,初始化/销毁

init-method="init_user" 【对应对象的init_user方法,在对象创建爱之后执行 】
destroy-method="destroy_user" 【在调用容器对象的destriy方法时候执行,(容器用实现类)】

user.java

package com.huan.Bean;

/**
 * Created by 马欢欢 on 2017/6/24.
 */
public class User {
    private int id;
    private String username;
    private String password;
    public User(){
        System.out.println("创建user对象");
    }
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public void init_user(){
        System.out.println("在对象创建时访问该方法");
    }
    public void destroy_user(){
        System.out.println("在对象销毁时执行");
    }
}

配置文件

        <bean id="user" class="com.huan.Bean.User" scope="singleton" lazy-init="false"
 init-method="init_user" destroy-method="destroy_user"></bean>

读取创建user对象:

public class Test2 {
    @Test
    public void test1(){
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
        System.out.println("创建容器");
        User user = (User) applicationContext.getBean("user");
        User user2 = (User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println(user2);
        applicationContext.destroy();

    }
}

上一篇:Spring框架入门

文集:Spring框架学习

相关文章

  • Spring--Bean创建细节

    一.对象创建单例/多例 scope="singleton", 默认值, 即 默认是单例 【service/da...

  • 1.1.0. 对象的存储细节

    目录 对象的存储细节 isa指针 使用一个类创建多个对象 1.对象的存储细节 类创建对象,每个对象在内存中都占据一...

  • 《工厂模式》

    简单工厂就是创建一个工厂类,这个类负责对象的创建,而不是上端直接New 对象。 优点: 上端不会出现任何细节,细节...

  • JS创建对象、JS继承

    一、创建对象 使用工厂模式创建对象用函数来封装以特定接口创建对象的细节,函数createPerson()能够根据接...

  • 代码细节优化

    纯代码细节优化 使用下放代码创建一个视图

  • idea创建类时添加类注释

    idea创建类时添加类注释(细节) File -> Settings -> Editor -> File and ...

  • Android创建Activity的细节

    创建Activity是Android开发的最简单的事情,现在讲一些容易忽略的点整理统计一下。 1.实现父类的pro...

  • iOS创建发布证书细节

    What type of certificate do you need? Intermediate Certif...

  • PCH文件创建流程细节

    1. 添加pch文件,new file... --> other --> PCH File 2.选择PCH文件,查...

  • js设计模式

    1、工厂模式 //用函数来封装特定接口创建对象细节,抽象创建具体对象的过程 function createProd...

网友评论

    本文标题:Spring--Bean创建细节

    本文链接:https://www.haomeiwen.com/subject/coekcxtx.html