Spring--Bean創(chuàng)建細(xì)節(jié)

一.對象創(chuàng)建單例/多例

scope="singleton", 默認(rèn)值, 即 默認(rèn)是單例 【service/dao/工具類】
scope="prototype", 多例; 【Action對象】

讀取創(chuàng)建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>

二.什么時(shí)候創(chuàng)建?

scope="singleton" 單例 在啟動(dòng)(容器初始化之前), 就已經(jīng)創(chuàng)建了bean,且整個(gè)應(yīng)用只有一個(gè)。
scope="prototype" 多例 在用到對象的時(shí)候,才創(chuàng)建對象。

  • 1.單例配置文件(容器創(chuàng)建之前就已經(jīng)創(chuàng)建):
<bean id="user" class="com.huan.Bean.User" scope="singleton"></bean>
  • 2.多例配置文件()
<bean id="user" class="com.huan.Bean.User" scope="prototype"></bean>

三 是否延遲創(chuàng)建

lazy-init="false" 默認(rèn)為false, 不延遲創(chuàng)建,即在啟動(dòng)時(shí)候就創(chuàng)建對象
lazy-init="true" 延遲初始化, 在用到對象的時(shí)候才創(chuàng)建對象(只對單例有效)

  • 1.單例配置文件(容器創(chuàng)建之前就已經(jīng)創(chuàng)建):
 <bean id="user" class="com.huan.Bean.User" scope="singleton" lazy-init="true"></bean>
image.png

四. 創(chuàng)建對象之后,初始化/銷毀

init-method="init_user" 【對應(yīng)對象的init_user方法,在對象創(chuàng)建愛之后執(zhí)行 】
destroy-method="destroy_user" 【在調(diào)用容器對象的destriy方法時(shí)候執(zhí)行,(容器用實(shí)現(xiàn)類)】

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("創(chuàng)建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("在對象創(chuàng)建時(shí)訪問該方法");
    }
    public void destroy_user(){
        System.out.println("在對象銷毀時(shí)執(zhí)行");
    }
}

配置文件

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

讀取創(chuàng)建user對象:

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

    }
}

上一篇:Spring框架入門

文集:Spring框架學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,915評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,765評論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,951評論 6 342
  • 文章作者:Tyan博客:noahsnail.com 3.4 Dependencies A typical ente...
    SnailTyan閱讀 4,199評論 2 7
  • 今天的夜里沒有火車的嘯鳴 如此看來,這是我對夜晚最單純的想象 想象著隨列車駛來時(shí)的燈光 伴著鐵軌律動(dòng)的酣夢 如癡如...
    鳳炎菥閱讀 215評論 0 3