1. 程式人生 > >《Spring》------物件的建立機制剖析

《Spring》------物件的建立機制剖析

前言

  • 利用Spring框架,我們很方便的將物件管理起來,比如說:“從物件的建立(Ioc),到物件的使用(DI)”。那麼在物件是以何種方式建立的,以及其建立的時間,還有建立物件是單例的還是多例是怎麼控制的哪?讓小編結合在專案中的經驗,好好的剖析一下。

1、物件的建立方式

1.1、利用建構函式建立物件

配置檔案

<bean id="helloWorld" class="com.spring.createobject.method.HelloWorld"></bean>

測試方法

@Test
public void testCreateObject_Default
(){ //啟動spring容器 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //根據id把spring容器中的bean提取出來了 HelloWorld helloWorld = (HelloWorld)context.getBean("helloWorld"); helloWorld.hello(); }

1.2、靜態工廠建立物件

配置檔案

<bean id="helloWorld2" class="com.spring.createobject.method.factory.HelloWorldFactory"
factory-method="getInstance">
</bean>

靜態工廠類

/**
* 利用靜態工廠模式建立物件:spring容器內部呼叫了HelloWorldFactory中的getInstance方法建立物件,而具體的new物件的過程是由程式設計師來完成的。
*/
    public class HelloWorldFactory {
        public static HelloWorld getInstance(){
            return new HelloWorld();
        }
    }

1.3、抽象工廠方法建立物件

配置檔案

<bean id="helloWorldFactory" class="com.spring.createobject.method.factory.HelloWorldFactory2"></bean>
<!-- 
    抽象工廠方式建立物件
    factory-bean是一個工廠bean
    factory-method是一個工廠方法
--> 
<bean id="helloWorld3" 
    factory-bean="helloWorldFactory" 
    factory-method="getInstance"></bean>
</beans>

測試方法

@Test
public void testCreateObject_InstaceFactory(){
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    HelloWorld helloWorld =(HelloWorld)context.getBean("helloWorld3");
    helloWorld.hello();
}

2、物件的建立時間

2.1、預設方式:

  • 載入Spring配置檔案時候建立物件,配置檔案中有幾個bean,就建立幾個物件。程式碼如下
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

2.2、懶載入方式:

  • 在配置檔案中,更改lazy-init屬性的值為true
<bean id="helloWorld2" class="com.itheima12.spring.createobject.when.HelloWorld" lazy-init="true"></bean> 
  • 當我們啟動Spring的配置檔案後,物件並沒有建立,而是等到我們想使用到物件的時候,物件才會建立,程式碼如下。
context.getBean("helloWorld3");

3、建立的物件是單例還是多例

我們在bean中修改scope屬性,將其值為prototy,這樣創建出來的物件時候多例的,配置檔案如下所示

<bean id="helloWorld2"              class="com.itheima12.spring.scope.HelloWorld"scope="prototype"></bean>
  • 注:只要將scope的屬性改成prototype,Spring建立物件的方式都是懶載入。即都是在context.getBean()的時候建立物件。

4、小結

  • 以上就是Spring建立物件機制的剖析,在Spring的bean中,肯定還有很多實用的屬性沒有提到,小編在這裡歡迎大家前來補充。另外,當Spring如Strus2整合的時候,因為Strus2的Action是多例的,即使用者請求一次物件建立一次,而對於service和Dao一般都設定成單例的,這樣以來,Spring容器維護物件的數量相對少了一些。

相關推薦

Spring》------物件建立機制剖析

前言 利用Spring框架,我們很方便的將物件管理起來,比如說:“從物件的建立(Ioc),到物件的使用(DI)”。那麼在物件是以何種方式建立的,以及其建立的時間,還有建立物件是單例的還是多例是怎麼控制的哪?讓小編結合在專案中的經驗,好好的剖析一下。

JVM的藝術-物件建立與記憶體分配機制深度剖析

# JVM的藝術-物件建立與記憶體分配機制深度剖析 > ##### 引言 本章將介紹jvm的物件建立與記憶體分配。徹底帶你瞭解jvm的建立過程以及記憶體分配的原理和區域,以及包含的內容。 > ### 物件的建立 ![](https://img2020.cnblogs.com/ot

三、Java虛擬機器自動記憶體管理機制物件建立及記憶體分配

  1、物件是如何建立: 步驟:    (1)、虛擬機器遇到new <類名>的指令---->根據new的引數是否在常量池中定位一個類的符號引用    (2)、檢測該符號引用代表的類是否已經被載入、解析、和初始化。(如果沒有則

spring容器建立bean物件的方式

1)xml檔案中有bean的配置,而且這個bean所對應的java類中存在一個無參構造器,那麼這個時候spring容器就可以使用反射呼叫無參構造器來建立例項了(常規的方式) 2)通過工廠類獲得例項(工廠類實現了介面FactoryBean<?>) 例如: xml中的配置

Spring容器建立物件的幾種方式及其區別

1. 通過類路徑下的配置檔案獲取ApplicationContext    //在建立容器的時候建立物件          特點:佔用記憶體,但效率高 ApplicationContext ac=new ClassPathXmlApplicationContext("cl

spring容器建立物件的時間和懶載入

我們如何判斷一個物件是在spring容器啟動的時候建立的呢 還是在我們呼叫這個物件的時候建立的? 在單例的情況下: 在上面一個spring基礎(一)中,我們寫了如下的測試類: public class testHelloSpring { @Test p

Spring概念和三種物件建立方式

目錄 概念 Spring IOC ( 反轉控制) DI(依賴注入) BeanFactory ApplicationContext Bean元素的scope屬性 三種物件建立方式 構

Spring容器建立物件的三種方式

/** * spring容器做的事情: * 解析spring的配置檔案,利用Java的反射機制建立物件 * */ public class testHelloWorld { @Test public void testHelloWo

spring建立bean物件時多例和單例的區別

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w

JavaScript物件系統深入剖析3-建立物件Object.Create

3.建立物件Object.Create  @吳穹Adam 看這兩天同學們的反饋還是覺得比較難懂,因此,決定再舉一個例子幫助大家理解吧,後面有關Scope和閉包Closure的精彩內容就只好晚一點寫了! 其實,這個系列不是寫給初學者的,而是寫給那些中級JS程式設計師的,對JS有一定的認識,希望這個系列能

Spring容器建立物件的三種方式

先建立一個Product類 bean的例項化  就是在spring容器裡註冊bean 第一種:通過無參構造方法建立   這種方法在啟動spring容器的時候就會建立bean物件 SpringContext利用無參的建構函式建立一個物件,然後利用setter方法賦值。

Struts2+Spring整合後Action物件建立方式

1、Spring容器建立:(web.xml中配置) Xml程式碼   <!-- spring配置檔案-->       <context-param>           <param-name>contextConfigLoc

Spring 容器及物件建立的過程

         Spring容器負責物件的建立過程,配置並且管理他們的建立過程,從建立到被回收。Spring有多種容器的實現,分為兩種型別,bean工廠,最簡單的容器,提供DI的支援。應用上下文是基於beanFactory構建的,提供企業極的服務。    常用的幾種應用上下

spring容器建立物件的生命週期

前面我們提到了, IOC的概念: 把物件的建立、初始化、銷燬等工作交給spring容器來完成。 物件的建立我們在前面幾個例子已經討論到了,現在,我們來討論一下 物件的初始化,銷燬 物件的初始化和銷燬,也是有spring來完成,可是我們之前在執行

Spring IOC建立物件的三種方式

使用IOC來建立物件有三種方式 1 .通過無參的構造方法來建立 通過set方法注入屬性 pojo類 public class User { public User() { System.out.println("User的

如何確認spring容器建立了某個物件

如果監聽器載入了applicationContext.xml檔案,就會建立spring容器,相應的,也會根據配置的物件,建立物件,如果確定spring容器是否載入,可以通過以上兩種方式解決:1、咱們自己改錯applicationContext.Xml檔案,或者web.xml檔

Spring_用Spring容器建立物件並給屬性賦值

建立spring配置檔案:spring-config.xml。物件的建立和賦值都在這裡進行配置。 建立實體類,設定屬性 import java.util.List; import java.util.Map; public class BookBean { private Lon

談談Spring中的物件跟Bean,你知道Spring怎麼建立物件的嗎?

> **本系列文章:** > > [讀原始碼,我們可以從第一行讀起](https://blog.csdn.net/qq_41907991/article/details/105667900) > > [你知道Spring是怎麼解析配置類的嗎?](https://blog.csdn.net/qq_4190799

Spring事務的機制

pri 異常捕獲 for cep 顯式 nbsp class transacti .class 默認spring事務只在發生未被捕獲的 runtimeexcetpion時才回滾。 spring aop 異常捕獲原理:被攔截的方法需顯式拋出異常,並不能經任何處理,這樣ao

C#進階系列——WebApi 路由機制剖析:你準備好了嗎?

事先 blank path can tex 全局配置 dex 找不到 save 前言:從MVC到WebApi,路由機制一直是伴隨著這些技術的一個重要組成部分。 它可以很簡單:如果你僅僅只需要會用一些簡單的路由,如/Home/Index,那麽你只需要配置一個默認路由就能簡