欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring框架通過工廠創(chuàng)建Bean的三種方式實現(xiàn)

 更新時間:2020年03月23日 14:30:12   作者:郭乾亮1998.  
這篇文章主要介紹了Spring框架通過工廠創(chuàng)建Bean的三種方式實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

工廠模式

Spring中bean的創(chuàng)建,默認是框架利用反射new出來的bean實例。有時候也會有一些復(fù)雜的情況。

假設(shè)有一個飛機,屬性如下,現(xiàn)在需要造很多同型號的飛機,那么唯一需要改變的屬性只有DriverName(機長姓名),此時可以使用工廠模式幫我們創(chuàng)建對象,有一個專門幫我們創(chuàng)建對象的類幫我們創(chuàng)建對象,這個類就叫工廠。

public class AirPlane {
	private String DriverName;// 機長姓名
	private String AirPlaneName;// 飛機名字
	private String longth;// 飛機長度
	private Integer num;// 載客量
	//省略getter與setter方法
}

靜態(tài)工廠:工廠本身不用創(chuàng)建對象,通過靜態(tài)方法調(diào)用。
實例工廠:工廠本身需要創(chuàng)建對象,需要先new一個工廠實例。

1.使用靜態(tài)工廠創(chuàng)建bean

靜態(tài)工廠:

package com.gql.factory;
import com.gql.bean.AirPlane;
/**
 * 靜態(tài)工廠
 * 
 * @author guoqianliang
 */
public class AirPlaneStaticFactory {
	public static AirPlane getAirPlane(String drivername) {
		System.out.println("靜態(tài)工廠造飛機...");
		AirPlane airplan = new AirPlane();
		airplan.setDriverName(drivername);
		airplan.setAirPlaneName("殲20");
		airplan.setLongth(20);
		airplan.setNum(1);
		return airplan;
	}
}

在xml中注冊靜態(tài)工廠:

<!-- 靜態(tài)工廠: factory-method="getAirPlane"指定哪個方法是工廠方法-->
	<bean id="airPlan1" class="com.gql.factory.AirPlaneStaticFactory" factory-method="getAirPlane">
		<constructor-arg value="舒克"></constructor-arg>
	</bean>

測試:

@Test
	public void test07() {
		System.out.println("容器啟動完成");
		AirPlane bean = (AirPlane) ioc.getBean("airPlan1");
		System.out.println("打印飛機屬性:" + bean);
	}

2.使用實例工廠創(chuàng)建bean

實例工廠:

package com.gql.factory;
import com.gql.bean.AirPlane;
/**
 * 實例工廠
 * @author guoqianliang
 */
public class AirPlaneInstanceFactory {
	public AirPlane getAirPlane(String drivername) {
		System.out.println("實例工廠造飛機...");
		AirPlane airplan = new AirPlane();
		airplan.setDriverName(drivername);
		airplan.setAirPlaneName("殲20");
		airplan.setLongth(20);
		airplan.setNum(1);
		return airplan;
	}
}

在xml中注冊實例工廠:

  • factory-bean=“InstanceFactory” :指定使用哪個工廠實例。
  • factory-method=“getAirPlane”:使用哪個工廠方法。
<bean id="InstanceFactory"
		class="com.gql.factory.AirPlaneInstanceFactory"></bean>
	<bean id="airPlan2" class="com.gql.bean.AirPlane"
		factory-bean="InstanceFactory" factory-method="getAirPlane">
		<constructor-arg value="舒克二號"></constructor-arg>
	</bean>

測試:

	@Test
	public void test08() {
		System.out.println("容器啟動完成");
		AirPlane bean = (AirPlane) ioc.getBean("airPlan2");
		System.out.println("打印飛機屬性:" + bean);
	}

3.實現(xiàn)FactoryBean工廠創(chuàng)建Bean

ioc容器啟動的時候不會創(chuàng)建實例(無論是單實例還是多實例),獲取的時候才創(chuàng)建實例對象。

實現(xiàn)FactoryBean接口:

package com.gql.factory;
import org.springframework.beans.factory.FactoryBean;
import com.gql.bean.Book;
public class MyFactoryBean implements FactoryBean<Book> {
	/**
	 * 返回創(chuàng)建的對象
	 */
	@Override
	public Book getObject() throws Exception {
		System.out.println("MyFactoryBean創(chuàng)建對象...");
		Book book = new Book();
		book.setBookName("紅樓夢");
		book.setAuthor("曹雪芹");
		return book;
	}

	/**
	 * 返回創(chuàng)建的對象的類型
	 */
	@Override
	public Class<?> getObjectType() {
		// TODO Auto-generated method stub
		return Book.class;
	}

	/**
	 * 是單例? true:是 false:不是
	 */
	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return true;
	}
}

在xml中注冊:

<!-- 使用FactoryBean -->
<bean id="myFactoryBean" class="com.gql.factory.MyFactoryBean"></bean>

測試:

@Test
	public void test09() {
		System.out.println("容器啟動完成");
		Object bean = ioc.getBean("myFactoryBean");
		System.out.println("打印屬性:" + bean);
	}

到此這篇關(guān)于Spring框架通過工廠創(chuàng)建Bean的三種方式實現(xiàn)的文章就介紹到這了,更多相關(guān)Spring 工廠創(chuàng)建Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java泛型通配符的使用詳解

    Java泛型通配符的使用詳解

    本文主要介紹了Java泛型通配符的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Mybatis-plus null值更新不生效問題解決

    Mybatis-plus null值更新不生效問題解決

    在使用Mybatis-plus進行數(shù)據(jù)更新時,默認策略是NOT_NULL,即null值不會被更新到數(shù)據(jù)庫,解決方法包括設(shè)置全局field-strategy、對特定字段設(shè)置field-strategy或使用UpdateWrapper方式更新,下面就來介紹一下
    2024-10-10
  • SpringBoot?如何從容器中獲取對象

    SpringBoot?如何從容器中獲取對象

    這篇文章主要介紹了SpringBoot?如何從容器中獲取對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring動態(tài)代理實現(xiàn)日志功能詳解

    Spring動態(tài)代理實現(xiàn)日志功能詳解

    這篇文章主要為大家詳細介紹了Spring動態(tài)代理實現(xiàn)日志功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java通過反射注解賦值的方法詳解

    Java通過反射注解賦值的方法詳解

    這篇文章主要為大家詳細介紹了Java語言如何通過反射實現(xiàn)注解賦值,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2022-07-07
  • Java初始化List方法代碼實例

    Java初始化List方法代碼實例

    這篇文章主要介紹了Java初始化List方法代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Java基于分治法實現(xiàn)的快速排序算法示例

    Java基于分治法實現(xiàn)的快速排序算法示例

    這篇文章主要介紹了Java基于分治法實現(xiàn)的快速排序算法,結(jié)合實例形式分析了java基于分治法的快速排序相關(guān)實現(xiàn)技巧,代碼中備有較為詳細的注釋說明便于理解,需要的朋友可以參考下
    2017-12-12
  • Java?Float?保留小數(shù)位精度的實現(xiàn)

    Java?Float?保留小數(shù)位精度的實現(xiàn)

    這篇文章主要介紹了Java?Float?保留小數(shù)位精度的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Hystrix?Dashboard斷路監(jiān)控儀表盤的實現(xiàn)詳細介紹

    Hystrix?Dashboard斷路監(jiān)控儀表盤的實現(xiàn)詳細介紹

    這篇文章主要介紹了Hystrix?Dashboard斷路監(jiān)控儀表盤的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • mybatis-plus開啟sql打印的三種方式總結(jié)

    mybatis-plus開啟sql打印的三種方式總結(jié)

    這篇文章主要給大家介紹了mybatisplus開啟sql打印的三種方式,文章通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-11-11

最新評論