最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring6當(dāng)中獲取Bean的四種方式小結(jié)

 更新時(shí)間:2024年04月30日 09:50:41   作者:ChinaRainbowSea  
Spring 為Bean 的獲取提供了多種方式,通常包括4種方式,(也就是說(shuō)在Spring中為Bean對(duì)象的創(chuàng)建準(zhǔn)備了多種方案,目的是:更加靈活),本文將通過(guò)代碼示例詳細(xì)的給大家介紹了一下這四種方式,需要的朋友可以參考下

每博一文案

比如:《殺死一只是更鳥》中提到的
對(duì)應(yīng)我們:我們努力升本,考研,每天都在努力學(xué)習(xí),但是某天突然想到萬(wàn)一沒(méi)有考上的話,那現(xiàn)在的努力又有什么意義呢?
答案:在《殺死一只是更鳥》里有這樣一段話:
勇敢是,當(dāng)你還未開始,你就知道自己會(huì)輸,可你依然要去做,而且無(wú)論如何都要把它堅(jiān)持到底,你很少能贏,但有時(shí)也會(huì)。努力的這個(gè)過(guò)程本身就是有意義,能夠獲得理想的結(jié)果當(dāng)然很好,但如果失敗了也沒(méi)關(guān)系。因?yàn)槟愕挠赂?,從未辜?fù)你的青春,而黎明的光亮,總有一刻,會(huì)照亮穿梭于黑暗之中的自己。
況且,你還不一定會(huì)輸呢。

Spring 為Bean 的獲取提供了多種方式,通常包括4種方式。(也就是說(shuō)在Spring中為Bean對(duì)象的創(chuàng)建準(zhǔn)備了多種方案,目的是:更加靈活)

  • 第一種:通過(guò)構(gòu)造方法實(shí)例化,獲取 Bean對(duì)象
  • 第二種:通過(guò)簡(jiǎn)單工廠模式實(shí)例化,獲取Bean對(duì)象
  • 第三種:通過(guò)factory-bean 屬性,獲取Bean對(duì)象
  • 第四種:通過(guò)對(duì)FactoryBean 接口的實(shí)例化,獲取Bean對(duì)象

1. Spring6 當(dāng)中 獲取 Bean 的四種方式

1.1 第一種方式:通過(guò)構(gòu)造方法獲取 Bean

簡(jiǎn)單的說(shuō):就是通過(guò)在spring的配置文件中,進(jìn)行一個(gè)配置,從而調(diào)取其中 Bean 的構(gòu)成方法,獲取到 對(duì)應(yīng)的Bean對(duì)象。

準(zhǔn)備工作:通過(guò) maven 導(dǎo)入 Spring6的框包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>spring6-005-bean-instantiation-blog</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.0.11</version>
        </dependency>


        <!-- junit4 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

這里我們創(chuàng)建一個(gè)User 的類,方便我們進(jìn)行一個(gè),測(cè)試。為了測(cè)試效果,更加明顯,這里這個(gè)User類就定義成一個(gè)空的類吧

在這里插入圖片描述

配置相關(guān)的 spring.xml 配置文件信息內(nèi)容,告知 Spirng 框架,幫我們進(jìn)行一個(gè)管理。

外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--   第一種: 通過(guò)構(gòu)造方法獲取 Bean -->
    <bean id="user" class="com.rainbowsea.Bean.User"></bean>
</beans>

運(yùn)行測(cè)試,看是否能夠,獲取到我們想要的這個(gè) User 類對(duì)象。

外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳


import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    @org.junit.Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");
        User user = applicationContext.getBean("user", User.class);
        System.out.println(user);
    }
}

從上述結(jié)果,我們通過(guò)構(gòu)造方法,獲取到了 Bean 對(duì)象。

1.2 第二種方式:通過(guò)簡(jiǎn)單工廠模式獲取 Bean

第一步: 定義一個(gè)Bean,還是使用 User 對(duì)象

在這里插入圖片描述

外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳 第二步: 編寫簡(jiǎn)單工廠模式當(dāng)中的工廠類。

注意: 這里的 User 對(duì)象,本質(zhì)上,還是我們程序員自己給 new 出來(lái)的,并不是 Spring 幫我們弄的。

在這里插入圖片描述

/**
 * 特點(diǎn):它是簡(jiǎn)單工廠模式(靜態(tài)工廠模式),是靜態(tài)的一個(gè)方法
 *
 */
public class UserFactory {
    public static User get() {

        // 本質(zhì)上,還是我們自己程序員自己 new 出來(lái)的
        return new User();
    }
}

第三步:在Spring配置文件中指定創(chuàng)建該Bean的方法(使用factory-method屬性指定)

通過(guò)簡(jiǎn)單工廠模式,你需要在Spring當(dāng)中配置文件種告訴 Spring框架,調(diào)用哪個(gè)類當(dāng)中的哪個(gè)方法可以獲取到這個(gè)你要的 Bean; factory-method 指明方法()對(duì)應(yīng)方法的小寫。

factory-method= 屬性我們這里指定的是 UserFactory 工廠類當(dāng)中靜態(tài)方法,也就是告訴Spring 框架,調(diào)用方法可以獲取到你要的Bean 對(duì)象。

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

   
    <!--   第二種: 通過(guò)簡(jiǎn)單工廠模式,你需要在Spring當(dāng)中配置文件種告訴 Spring框架,調(diào)用哪個(gè)類當(dāng)中的哪個(gè)方法可以獲取到這個(gè)
你要的 Bean; factory-method 指明方法()對(duì)應(yīng)方法的小寫 -->
    <!--    factory-method= 屬性指定的時(shí)工廠類當(dāng)中靜態(tài)方法,也就是告訴Spring 框架,調(diào)用方法可以獲取到你要的
    Bean-->
    <bean id="userFactory" class="com.rainbowsea.Bean.UserFactory" factory-method="get"></bean>
</beans>

第四步: 編寫測(cè)試程序

在這里插入圖片描述

在這里插入圖片描述

通過(guò): 這樣一個(gè)配置,就讓我們告知了 Spring 框架,你調(diào)用那個(gè)類當(dāng)中的哪里方法,就可以獲取到我們想要的Bean 對(duì)象。

1.3 第三種方式:通過(guò) factory-bean 屬性獲取 Bean

使用 factory-bean 屬性獲取 Bean,本質(zhì)上是,使用23種設(shè)計(jì)模式當(dāng)中的工廠方法模式(注意,這里沒(méi)有錯(cuò),不了解的,可能會(huì)認(rèn)為是,我寫錯(cuò)了,并沒(méi)有寫錯(cuò)這里)。

**第一步:**定義一個(gè) Bean 對(duì)象。這里我們還是使用 User 這里類,進(jìn)行試驗(yàn)。

在這里插入圖片描述

第二步: 既然是工廠方法模式,自然是少不了,工廠了。需要注意這里是工廠方法模式,與靜態(tài)工廠模式不同,這個(gè)生產(chǎn) Bena 對(duì)象的方法,不是靜態(tài)方法,而是實(shí)例化方法 。這也導(dǎo)致了,我們?cè)诮酉聛?lái)后續(xù)的 spring.xml 配置文件上與第二種 方式有所差異的。注意其中的差異,所使用的標(biāo)簽,不要弄錯(cuò)了。

在這里插入圖片描述

package com.rainbowsea.Bean;

/**
 * 特點(diǎn):它是簡(jiǎn)單工廠模式(靜態(tài)工廠模式),是靜態(tài)的一個(gè)方法
 *
 */
public class UserFactory {

    // 工廠方法模式中的具體工廠角色中的方法是:實(shí)例方法
    public User get() {

        // 相同點(diǎn)是和靜態(tài)工廠方法模式是一樣的:都是我們自己程序員 new 的。
        // 然后交給 Spring框架管理
        return new User();
    }
}

**第三步:**在Spring配置文件中指定factory-bean以及factory-method

上面我們說(shuō)到,工廠方法模式與靜態(tài)方法模式,不同點(diǎn),上是工廠方法模式生產(chǎn)Bean 對(duì)象的方法,并不是一個(gè) static() 方法 ,所以,使用的標(biāo)簽屬性就有所不同了。

這里我們需要用到以下,兩個(gè)標(biāo)簽屬性,才能讓spirng 準(zhǔn)確的調(diào)用哪個(gè)類當(dāng)中的哪個(gè)對(duì)象的方法,獲取,返回給我們自己想要的 Bean 對(duì)象,這里是User 這個(gè) bean對(duì)象。

  • factory-bean 指明哪個(gè)對(duì)象
  • factory-method當(dāng)中的哪個(gè)方法;可以獲取到你想要的 bean

簡(jiǎn)單的說(shuō):告訴Spring 通過(guò)哪個(gè)對(duì)象,當(dāng)中的哪個(gè)方法,可以獲取到我想要的 Bean 對(duì)象 。

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!--    第三種:通過(guò)Spring提供的實(shí)例化方式,通過(guò)工廠方法模式,通過(guò)
     factory-bean 指明哪個(gè)對(duì)象+factory-method當(dāng)中的哪個(gè)方法;可以獲取到你想要的 bean-->
    <!--    簡(jiǎn)單的說(shuō):就是告訴Spring框架,調(diào)用哪個(gè)對(duì)象中的哪個(gè)方法,就可以獲取到你想要的 Bean了-->


    <bean id="userFactory" class="com.rainbowsea.Bean.UserFactory"> </bean>
    <!--    以下的配置很關(guān)鍵: factory-bean:告訴Spring框架調(diào)用哪個(gè)對(duì)象; factory-method 告訴Spring框架
    調(diào)用哪個(gè)方法,可以獲取到你要的Bean-->
    <bean id="userBean" factory-bean="userFactory" factory-method="get"></bean>
</beans>

第四步: 測(cè)試運(yùn)行結(jié)果。

在這里插入圖片描述

import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    @org.junit.Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");
        User user = applicationContext.getBean("userBean", User.class);
        System.out.println(user);
    }
}

1.4 第四種方式:通過(guò) FactoryBean 接口 獲取 Bean

以上的第三種方式中,factory-bean的屬性值是我們自定義的,factory-method的屬性值也是我們自己定義的。

在Spring中,當(dāng)你編寫的類直接實(shí)現(xiàn)FactoryBean接口之后,factory-bean不需要指定了,factory-method也不需要指定了。

factory-bean會(huì)自動(dòng)指向?qū)崿F(xiàn)FactoryBean接口的類,factory-method會(huì)自動(dòng)指向getObject()方法。

在這里插入圖片描述

package org.springframework.beans.factory;

import org.springframework.lang.Nullable;

public interface FactoryBean<T> {

	String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType";


	@Nullable
	T getObject() throws Exception;


	@Nullable
	Class<?> getObjectType();

    
	default boolean isSingleton() {
		return true;
	}

}

第四種方式:簡(jiǎn)單的說(shuō):就是對(duì)第三種方式的一種簡(jiǎn)化,通過(guò)讓對(duì)應(yīng)的工廠類是實(shí)現(xiàn)該接口implements FactoryBean ,Spring就知道該調(diào)用哪個(gè)對(duì)象,中的哪個(gè)方法,獲取到你要的 Bean 對(duì)象了 。從到到達(dá)了某種程度上的簡(jiǎn)化。

第一步: 定義一個(gè)Bean

這里我們還是使用 User 這里類,進(jìn)行試驗(yàn)。

在這里插入圖片描述

第二步: 編寫一個(gè)(工廠模式當(dāng)中的)工廠類實(shí)現(xiàn) FactoryBean接口

下面,我們來(lái)了解一下,F(xiàn)actoryBean接口下的這個(gè)三個(gè)方法的作用是干啥的

// 返回我們所需要的 Bean 對(duì)象
T getObject() throws Exception;

例如:注意一點(diǎn):這里還是需要我們自己 new() 出對(duì)應(yīng)所需要的 Bean 對(duì)象,而不是 Spirng 弄出來(lái)的

@Override
    public User getObject() throws Exception {
        return new User();  // 還是需要我們程序員自己 new() 出來(lái)
    }
 /**
     * 這個(gè)方法在接口中有默認(rèn)實(shí)現(xiàn)
     * 默認(rèn)返回 true,表示單例的
     * 如果想多例的化,直接講這個(gè)修改為: return false 即可。
     * @return
     */
default boolean isSingleton() {
		return true;
	}

例如:
    @Override
    public boolean isSingleton() {
        return true;  // 單例
    }

這里我們定義了一個(gè) UserFactory 產(chǎn)生 User 的對(duì)象的工廠類,同時(shí)實(shí)現(xiàn)implements FactoryBean 該接口。

在這里插入圖片描述

package com.rainbowsea.Bean;

import org.springframework.beans.factory.FactoryBean;

/**
 * 特點(diǎn):它是簡(jiǎn)單工廠模式(靜態(tài)工廠模式),是靜態(tài)的一個(gè)方法
 *
 */
public class UserFactory implements FactoryBean<User> {


    @Override
    public User getObject() throws Exception {
        // 本質(zhì)上還是我們程序員自己 new ()出來(lái)的,并不是 Spring 弄出來(lái)
        return new User();
    }

    // 這個(gè)方法可以不用管它。
    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return true;  // 單例
        // false 多例
    }

}

**第三步:**在Spring配置文件中配置FactoryBean

由于我們這個(gè)public class UserFactory implements FactoryBean 生產(chǎn) User 的工廠實(shí)現(xiàn)了 FactoryBean 接口,Spring 已經(jīng)是知道,我們需要調(diào)用的是哪個(gè)對(duì)象當(dāng)中的哪個(gè)方法,從而獲取對(duì)應(yīng)的 user Bean對(duì)象了。所以對(duì)應(yīng)其中的 spinrg.xml 只需要簡(jiǎn)單的配置一下,即可。

如下:

在這里插入圖片描述

將方式的核心就在于:通過(guò)一個(gè)特殊的Bean(工廠Bean當(dāng)中的方法)<該工廠實(shí)現(xiàn)了 FactoryBean 接口 >,來(lái)返回一個(gè)普通的Bean 對(duì)象。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <!--   Spring框架中:獲取Bean的第四種方式:通過(guò) FactoryBean 接口來(lái)實(shí)現(xiàn)指明 -->
    <!--    這種方式實(shí)際上就是第三種方式的簡(jiǎn)化-->
    <!--    由于你編寫的類實(shí)現(xiàn)了FactoryBean接口,那么這個(gè)類就是一個(gè)特殊的類,不需要你再手動(dòng)指定: factory-bean;
    factory-method 哪個(gè)對(duì)象,哪個(gè)方法了,你實(shí)現(xiàn)了 FactoryBean 接口,Spring框架就已經(jīng)知道了,不需要再特殊指明了-->
    <!--    剩下指明是哪個(gè)特殊的類就可以了-->
    <!--    通過(guò)一個(gè)特殊的Bean,工廠Bean,來(lái)返回一個(gè)普通的Bean person對(duì)象-->
    <bean id="userFactory" class="com.rainbowsea.Bean.UserFactory"></bean>
</beans>

在這里插入圖片描述

第四步: 運(yùn)行程序測(cè)試。

在這里插入圖片描述

package com.rainbowsea.test;

import com.rainbowsea.Bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {

    @org.junit.Test
    public void test() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");
        User user = applicationContext.getBean("userFactory", User.class);
        System.out.println(user);
    }
}

FactoryBean在Spring中是一個(gè)接口。被稱為“工廠Bean”。“工廠Bean(通過(guò)工廠上的方法返回一個(gè) 對(duì)應(yīng)的 Bean 對(duì)象)”是一種特殊的Bean。所有的“工廠Bean”都是用來(lái)協(xié)助Spring框架來(lái)創(chuàng)建其他Bean對(duì)象的。

1.5 BeanFactroy 和 FactroyBean 的區(qū)別

BeanFactory

Spring IoC容器的頂級(jí)對(duì)象,BeanFactory被翻譯為“Bean工廠”,在Spring的IoC容器中,“Bean工廠”負(fù)責(zé)創(chuàng)建Bean對(duì)象。 BeanFactory是工廠。

在這里插入圖片描述

FactoryBean

FactoryBean:它是一個(gè)Bean,是一個(gè)能夠輔助Spring實(shí)例化其它Bean對(duì)象的一個(gè)Bean。
在Spring中,Bean可以分為兩類:

第一類:普通Bean第二類:工廠Bean(記?。汗SBean也是一種Bean,只不過(guò)這種Bean,比較特殊工廠Bean(通過(guò)工廠上的方法返回一個(gè) 對(duì)應(yīng)的 Bean 對(duì)象),從而到達(dá)輔助Spring實(shí)例化其它Bean對(duì)象的效果。)

2. 將Date 作為復(fù)雜類型進(jìn)行注入(可以自定義 Date 時(shí)間類型的格式)

在Spring 當(dāng)中 為什么要將 Date 作為復(fù)雜類型進(jìn)行注入呢?

原因是,在Spring 如果將 Date 作為簡(jiǎn)單類型進(jìn)行注入的話,需要特定的時(shí)間格式,才能注入成功。

準(zhǔn)備工作:定義一個(gè) Bean 類,同時(shí)其中含有一個(gè) Date 類型的屬性值。

package com.rainbowsea.Bean.myDate;

import java.util.Date;

public class Vip {

    private Date birth;

    public Vip(Date birth) {
        this.birth = birth;
    }

    public Vip() {
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    @Override
    public String toString() {
        return "Vip{" +
                "birth=" + birth +
                '}';
    }
}

演示如下:

在這里插入圖片描述

警告: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘vipBean’ defined in class path resource [spring2.xml]: Failed to convert property value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birth’; Cannot convert value of type ‘java.lang.String’ to required type ‘java.util.Date’ for property ‘birth’: no matching editors or conversion strategy found

對(duì)應(yīng)Spring當(dāng)中的 Date 作為簡(jiǎn)單類型的注入,需要用如下它美國(guó)的格式時(shí)間格式,才能被識(shí)別為 Date 類型。特殊格式如下:

Mon Apr 29 20:03:58 CST 2024

在這里插入圖片描述

雖然轉(zhuǎn)化成功了,但是這個(gè)格式,對(duì)于我們國(guó)人來(lái)說(shuō),不太友好,而且也不好記憶。

所以為了將Date 類型轉(zhuǎn)化為我們國(guó)人友好的類型的格式,我們就需要將 Date 定義為 復(fù)雜類型

進(jìn)行 ref 注入。但是怎樣將 Date 作為復(fù)雜類型注入的同時(shí)又可以轉(zhuǎn)換為我們需要的格式呢。——這就需要用到上面我們所學(xué)習(xí)的通過(guò) FactoryBean接口 獲取 Bean 對(duì)象了。其實(shí)呢,上面第二種方式,第三種方式,第四種方式都是可以實(shí)現(xiàn)的。但是第四種方式比較簡(jiǎn)化,我們這里就用第四種方式來(lái)解決。這個(gè)問(wèn)題。

第一步: 定義一個(gè)含有 Date 類型的類,就還是使用上面哪個(gè) Vip 類吧

在這里插入圖片描述

第二步: 創(chuàng)建一個(gè)用于生產(chǎn)我們所需要的格式的 Date的工廠 同時(shí)該工廠又實(shí)現(xiàn)了 implements FactoryBean 接口。告訴Spring框架,調(diào)用其中的哪個(gè)對(duì)象當(dāng)中的哪個(gè)方法,獲取到我們所需要的 Date 對(duì)象。

在這里插入圖片描述

package com.rainbowsea.Bean.myDate;


import org.springframework.beans.factory.FactoryBean;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Date 工廠模式
 * DateFactoryBean 這個(gè)工廠Bean 協(xié)助我們Spring 創(chuàng)建這個(gè)普通的Bean;Date
 */
public class DateFactor implements FactoryBean<Date> {

    // 這個(gè) String字符串類型,作為我們Date類型,進(jìn)行一個(gè)轉(zhuǎn)換
    private String strDate;

    public DateFactor() {
    }

    public DateFactor(String strDate) {
        this.strDate = strDate;
    }

    public String getStrDate() {
        return strDate;
    }

    public void setStrDate(String strDate) {
        this.strDate = strDate;
    }

    @Override
    public Date getObject() throws Exception {
        // 通過(guò) SimpleDateFormat 來(lái)自定義我們的 Date 的日期時(shí)間類型的格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 通過(guò)在 spring.xml 對(duì)DateFactor類當(dāng)中的  String strDate 屬性進(jìn)行賦值
        Date date = simpleDateFormat.parse(this.strDate); // 將字符串類型轉(zhuǎn)換為 Date 日期時(shí)間類型
        return date;  // 轉(zhuǎn)換后返回 Date 類型,進(jìn)行一個(gè)賦值操作
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return true;  // 單例 false 多例
    }
}

上述代碼的核心代碼片段講解:


    // 這個(gè) String字符串類型,作為我們Date類型,進(jìn)行一個(gè)轉(zhuǎn)換
    private String strDate;


    public Date getObject() throws Exception {
        // 通過(guò) SimpleDateFormat 來(lái)自定義我們的 Date 的日期時(shí)間類型的格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 通過(guò)在 spring.xml 對(duì)DateFactor類當(dāng)中的  String strDate 屬性進(jìn)行賦值
        Date date = simpleDateFormat.parse(this.strDate); // 將字符串類型轉(zhuǎn)換為 Date 日期時(shí)間類型
        return date;  // 轉(zhuǎn)換后返回 Date 類型,進(jìn)行一個(gè)賦值操作
    }

在這里插入圖片描述

通過(guò)定義一個(gè)Date 類型的工廠類 生產(chǎn)出,我們需要的格式的 Date 類型。

第三步: 為我們這個(gè) 工廠類(生產(chǎn)我們所需的Date日期類型格式),配置到 Spring 當(dāng)中去,并讓 Spirng 框架返回一個(gè)我們需要的 Date類型的 Bean 對(duì)象,同時(shí)作為復(fù)雜類型,賦值到 Vip 這個(gè)類當(dāng)中的 birth 屬性的值。

在這里插入圖片描述

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!--    指明通過(guò)DateFactor 獲取到一個(gè)我們所需要的格式的 Date 類型-->
    <bean id="myDateBean" class="com.rainbowsea.Bean.myDate.DateFactor">
        <property name="strDate" value="1980-01-01"></property>
    </bean>
<!--    獲取到之后,作為復(fù)雜類型,賦值給 Vip 當(dāng)中的 Date birth 屬性值-->
    <bean id="vipBean" class="com.rainbowsea.Bean.myDate.Vip">
       <property name="birth" ref="myDateBean"></property>
    </bean>
</beans>

第四步: 運(yùn)行程序測(cè)試

在這里插入圖片描述

核心要素就是:通過(guò)一個(gè)(這里時(shí)生產(chǎn)我們所需格式的 Date 類型的)工廠類實(shí)現(xiàn) FactoryBean接口,被稱為“工廠Bean”。“工廠Bean(通過(guò)工廠上的方法返回一個(gè)對(duì)應(yīng)的 Bean(這里時(shí) Date ) 對(duì)象)”是一種特殊的Bean。獲取到對(duì)應(yīng) Date 后,再作為 復(fù)雜類型作為其他類上的屬性的值存在。

3. 總結(jié)

第一種通過(guò)構(gòu)造方法獲取 Bean:簡(jiǎn)單的說(shuō):就是通過(guò)在spring的配置文件中,進(jìn)行一個(gè)配置,從而調(diào)取其中 Bean 的構(gòu)成方法,獲取到 對(duì)應(yīng)的Bean對(duì)象。

第二種方式:通過(guò)簡(jiǎn)單工廠模式獲取 Bean;注意時(shí)工廠類中生產(chǎn)對(duì)應(yīng)的Bean對(duì)象是靜態(tài)方法()。同時(shí)其中的 Bean 本質(zhì)上還是程序員自己 new()出來(lái)的。

通過(guò)簡(jiǎn)單工廠模式,你需要在Spring當(dāng)中配置文件種告訴 Spring框架,調(diào)用哪個(gè)類當(dāng)中的哪個(gè)方法可以獲取到這個(gè)你要的 Bean; factory-method 指明方法()對(duì)應(yīng)方法的小寫。

factory-method= 屬性我們這里指定的是 UserFactory 工廠類當(dāng)中靜態(tài)方法,也就是告訴Spring 框架,調(diào)用方法可以獲取到你要的Bean 對(duì)象。

第三種方式:通過(guò) factory-bean 屬性獲取 Bean;使用 factory-bean 屬性獲取 Bean,本質(zhì)上是,使用23種設(shè)計(jì)模式當(dāng)中的工廠方法模式。(注意 其中的工廠類當(dāng)中的生產(chǎn)對(duì)應(yīng) Bean的方法是實(shí)例方法(不是靜態(tài)方法),其中的 Bean 本質(zhì)上還是程序員自己 new()出來(lái)的 )

這里我們需要用到以下,兩個(gè)標(biāo)簽屬性,才能讓spirng 準(zhǔn)確的調(diào)用哪個(gè)類當(dāng)中的哪個(gè)對(duì)象的方法,獲取,返回給我們自己想要的 Bean 對(duì)象,這里是User 這個(gè) bean對(duì)象。 factory-bean 指明哪個(gè)對(duì)象factory-method當(dāng)中的哪個(gè)方法;可以獲取到你想要的 bean

第四種方式:通過(guò) FactoryBean 接口 獲取 Bean;簡(jiǎn)單的說(shuō):就是對(duì)第三種方式的一種簡(jiǎn)化,通過(guò)讓對(duì)應(yīng)的工廠類是實(shí)現(xiàn)該接口implements FactoryBean ,Spring就知道該調(diào)用哪個(gè)對(duì)象,中的哪個(gè)方法,獲取到你要的 Bean 對(duì)象了 。從到到達(dá)了某種程度上的簡(jiǎn)化。

該方式的核心就在于:通過(guò)一個(gè)特殊的Bean(工廠Bean當(dāng)中的方法)<該工廠實(shí)現(xiàn)了 FactoryBean 接口 >,來(lái)返回一個(gè)普通的Bean 對(duì)象。

BeanFactroy 和 FactroyBean 的區(qū)別

將Date 作為復(fù)雜類型進(jìn)行注入(可以自定義 Date 時(shí)間類型的格式);

對(duì)應(yīng)Spring當(dāng)中的 Date 作為簡(jiǎn)單類型的注入,需要用如下它美國(guó)的格式時(shí)間格式,才能被識(shí)別為 Date 類型。

核心要素就是:通過(guò)一個(gè)(這里時(shí)生產(chǎn)我們所需格式的 Date 類型的)工廠類實(shí)現(xiàn) FactoryBean接口,被稱為“工廠Bean”。“工廠Bean(通過(guò)工廠上的方法返回一個(gè)對(duì)應(yīng)的 Bean(這里時(shí) Date ) 對(duì)象)”是一種特殊的Bean。獲取到對(duì)應(yīng) Date 后,再作為 復(fù)雜類型作為其他類上的屬性的值存在。

4. 最后:

以上就是Spring6當(dāng)中獲取Bean的四種方式小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Spring6獲取Bean的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • idea?git提交代碼時(shí),特別慢的解決方案

    idea?git提交代碼時(shí),特別慢的解決方案

    IDEA提交代碼變慢因執(zhí)行代碼分析和TODO檢查,解決方法為關(guān)閉相關(guān)選項(xiàng)并重啟IDE,可提升提交效率
    2025-09-09
  • 詳解SpringBoot如何自定義啟動(dòng)畫面

    詳解SpringBoot如何自定義啟動(dòng)畫面

    當(dāng)我們?cè)趩?dòng)SpringBoot項(xiàng)目時(shí)候會(huì)在控制臺(tái)上看到一些單調(diào)的圖案,有些朋友覺得這些圖案很單調(diào),那我們是否可以自定義啟動(dòng)畫面呢,接下來(lái)小編就給大家介紹一下SpringBoot是如何實(shí)現(xiàn)自定義啟動(dòng)畫面,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07
  • Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解

    Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解

    這篇文章主要介紹了Spring中@RequestParam、@RequestBody和@PathVariable的用法詳解,后端使用集合來(lái)接受參數(shù),靈活性較好,如果url中沒(méi)有對(duì)參數(shù)賦key值,后端在接收時(shí),會(huì)根據(jù)參數(shù)值的類型附,賦一個(gè)初始key,需要的朋友可以參考下
    2024-01-01
  • 阿里四面之Spring Exception的原理解析

    阿里四面之Spring Exception的原理解析

    本文給大家介紹阿里四面之Spring Exception的原理解析,本文通過(guò)錯(cuò)誤場(chǎng)景分析給大家詳細(xì)介紹Spring異常處理流程,感興趣的朋友一起看看吧
    2021-10-10
  • Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析

    Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析

    這篇文章主要為大家介紹了Netty分布式FastThreadLocal的set方法實(shí)現(xiàn)邏輯剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java實(shí)現(xiàn)將Word轉(zhuǎn)換成Html的示例代碼

    Java實(shí)現(xiàn)將Word轉(zhuǎn)換成Html的示例代碼

    在業(yè)務(wù)中,常常會(huì)需要在瀏覽器中預(yù)覽Word文檔,或者需要將Word文檔轉(zhuǎn)成HTML文件保存,本文主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)Word轉(zhuǎn)換成Html的相關(guān)方法,希望對(duì)大家有所幫助
    2024-02-02
  • java和jsp中的request使用示例

    java和jsp中的request使用示例

    這篇文章主要介紹了java和jsp中的request使用示例,需要的朋友可以參考下
    2014-02-02
  • Java 正則表達(dá)式詳細(xì)介紹

    Java 正則表達(dá)式詳細(xì)介紹

    本文主要介紹 Java 正則表達(dá)式的內(nèi)容,這里整理了Java 正則表達(dá)式的相關(guān)資料,并詳細(xì)介紹,附有代碼示例,有興趣的小伙伴可以參考下
    2016-09-09
  • 在idea中設(shè)置項(xiàng)目編碼格式為UTF-8的操作方法

    在idea中設(shè)置項(xiàng)目編碼格式為UTF-8的操作方法

    idea中的默認(rèn)編碼為GBK,在開發(fā)過(guò)程中一般將編碼格式改為UTF-8,所以本文給大家介紹了在idea中設(shè)置項(xiàng)目編碼為UTF-8的操作方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 在Spring Boot中如何使用Cookies詳析

    在Spring Boot中如何使用Cookies詳析

    這篇文章主要給大家介紹了關(guān)于在Spring Boot中如何使用Cookies的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11

最新評(píng)論

洞头县| 巴楚县| 垦利县| 红桥区| 达日县| 青海省| 平利县| 双桥区| 建湖县| 府谷县| 正阳县| 阳曲县| 儋州市| 府谷县| 花莲市| 柳林县| 汝城县| 金堂县| 沧州市| 南宫市| 虎林市| 兴安县| 肇东市| 永泰县| 枣庄市| 大竹县| 石门县| 福州市| 佛坪县| 公安县| 益阳市| 陇西县| 溆浦县| 玉树县| 松阳县| 唐山市| 岚皋县| 鄂尔多斯市| 苗栗市| 习水县| 阿拉善盟|