1. 程式人生 > >Spring中factory-method的用法

Spring中factory-method的用法

1. 通過靜態方法例項化一個bean,例項化出來的bean的型別對應於靜態方法的返回型別,這地點不同於普通的bean
   (1) 靜態方法無引數:
   <bean id="thefmbean" class="springtest.FactoryMethodBean" factory-method="getInstance" />
  (2) 靜態方法有一個引數
   <bean id="thenamedfmbean" class="springtest.FactoryMethodBean" 
         factory-method="getNamedInstance">
        <constructor-arg value="China" />
  </bean>
  這裡<constructor-arg value="China" />表示為靜態方法引數的值
 (3) 對於(2)例項化出來的bean,再進行屬性set
   <bean id="thenamedfmbean" class="springtest.FactoryMethodBean" 
         factory-method="getNamedInstance">
        <constructor-arg value="China" />
        <property name="id" value="20" />
  </bean>
2. 對一個已經例項化的bean,得到其普通方法返回的物件,引數方式與1完全相同
  <bean id="duke" class="springtest.Juggler">
    <constructor-arg value="15" />
  </bean>
  <bean id="employee" factory-bean="duke" factory-method="getYourEmployee">
    <constructor-arg value="Mike" />
    <property name="id" value="18" />
  </bean>


  其中duke為以普通方式例項化出來的bean,通過factory-method得到的是Employee的一個物件
  
package springtest;


public interface Performer
{


void perform() throws PerformanceException;


}
package springtest;


public class FactoryMethodBean implements Performer
{
private String name = "Hello";
private int id;

private FactoryMethodBean()
{

}

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

private static class StaticFactoryMethodBean
{
static FactoryMethodBean instance = new FactoryMethodBean();
}

public static FactoryMethodBean getInstance()
{
return StaticFactoryMethodBean.instance;
}

public static FactoryMethodBean getNamedInstance(String tmpName)
{
StaticFactoryMethodBean.instance.name = tmpName;
return StaticFactoryMethodBean.instance;
}


@Override
    public void perform() throws PerformanceException
    {
   System.out.println("FactoryMethodBean.name = " + name);
    }

public String getNewName()
{
return "new name";
}
}


package springtest;


public class Juggler implements Performer
{
private int beanBags = 3;

public Juggler()
{

}

public Juggler(int beanBags)
{
this.beanBags = beanBags;
}

@Override
public void perform() throws PerformanceException
{
System.out.println("Juggling " + beanBags + " beanBags");
}

public String getMyName()
{
return "My Name";
}

public String getYourName(String yourName)
{
return "Your name is " + yourName;
}

public Employee getYourEmployee(String adName)
{
return new Employee(adName);
}
}


package springtest;


public class Employee
{
private int id;
private String name;

public Employee(String name)
{
this.name = name;
}

public Employee()
{

}

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

public void setName(String name)
{
this.name = name;
}

public int getId()
{
return id;
}

public String getName()
{
return name;
}
}

相關推薦

Springfactory-method用法

1. 通過靜態方法例項化一個bean,例項化出來的bean的型別對應於靜態方法的返回型別,這地點不同於普通的bean    (1) 靜態方法無引數:    <bean id="thefmbean" class="springtest.FactoryMethodBean

Spring lookup-method 用法

1、官方文件解釋 If the method is abstract, the dynamically-generated subclass implements the method. Otherwise, the dynamically-generated subcla

Springfactory-method的使用

        除了constructor-arg和property裝配bean的方式,我們還可以通過bean的factory-method方法裝配bean,factory-method表示的是工廠方

spring @import的用法

get abstract strac new artifact png release ide rac 第一步: 新建Java工程 FirstSpringJAVA 第二步:導入相關的spring jar包 <dependency> &l

SpringBoot | 第十一章:Springapplication.properties用法大全

對 Spring 裡面的 Properties 不理解的開發者可能會覺得有點亂,主要是因為配置方式很多種,使用方式也很多種。 本文不是原理分析、原始碼分析文章,只是希望可以幫助讀者更好地理解和使用 Spring Properties。 Properties 的使用 先來看看 Prop

SpringApplicationContextAware介面用法

載入Spring配置檔案時,如果Spring配置檔案中所定義的Bean類,如果該類實現了ApplicationContextAware介面,那麼在載入Spring配置檔案時,會自動呼叫ApplicationContextAware介面中的 public void setAp

SpringjdbcTemplate的用法例項(一)

一、首先配置JdbcTemplate; 要使用Jdbctemplate 物件來完成jdbc 操作。通常情況下,有三種種方式得到JdbcTemplate 物件。        第一種方式:我們可以在自己定義的DAO 實現類中注入一個DataSource 引用來完 成Jdbc

spring@Async的用法

在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在spring 3.x之後,就已經內建了@Async來完美解決這個問題,本文將完成介紹@

spring的task用法案例

spring定時任務一 在xml中加上定時任務的名稱空間。程式碼:1. xmlns:task="http://www.springframework.org/schema/task"2. http://www.springframework.org/schema/task h

springjdbc.properties用法

jdbc.properties程式碼: jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@10.10.1.1:1521:ORCL jdbc.username=tes

關於Springorg.springframework.beans.factory.UnsatisfiedDependencyException異常

參數 ont 使用 容易 font body actor const 區分 這個異常是由於在applicationContext.xml中關於bean的autowirte裝配類型,在類型byName,byType,constructor三種類型中,可能會出現因無法自動裝配而

?springafterPropertiesSet方法與init-method配置描述

.post -m sse vax 註解 ota troy 一次 exc spring中afterPropertiesSet方法與init-method配置描述 1. InitializingBean.afterPropertiesSet()Spring中Initializi

springafterPropertiesSet方法與init-method配置描述

daemon sset end msg redis his === all HR ---恢復內容開始--- 今天看了前輩們寫的代碼用到了afterPropertiesSet()的方法,就好好整理了spring的bean加載 1. InitializingBean.after

Spring構造器、init-method、@PostConstruct、afterPropertiesSet孰先孰後,自動註入發生時間以及單例多例的區別

但是 lan 構造方法 nes src 調用父類構造方法 pos print 提醒      首先明白,spring的IOC功能需要是利用反射原理,反射獲取類的無參構造方法創建對象,如果一個類沒有無參的構造方法spring是不會創建對象的。在這裏需要提醒一下,如果我們在c

4.spring JDBC的基本用法

1.Spring的jdbc的基本用法: 2.spring的ioc配置以及以及增刪改查 3.策略模式 4. JDBCDaoSupport 其中優化部分,抽取重複程式碼段!如下圖方法!原理:因為子類自動會繼承父類中protected和public方法!

Spring@Async用法詳解及簡單例項

Spring中@Async用法 引言: 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在spring 3.x之後,就已經內建了@Async來完美解決這個問題,本文將完成

Spring MVC Session的用法

Spring MVC是個非常優秀的框架,其優秀之處繼承自Spring本身依賴注入(Dependency Injection)的強大的模組化和可配置性,其設計處處透露著易用性、可複用性與易整合性。優良的設計模式遍及各處,使得其框架雖然學習曲線陡峭,但一旦掌握則欲罷不能。初學者

Spring@Async用法總結

引言: 在Java應用中,絕大多數情況下都是通過同步的方式來實現互動處理的;但是在處理與第三方系統互動的時候,容易造成響應遲緩的情況,之前大部分都是使用多執行緒來完成此類任務,其實,在Spring 3.x之後,就已經內建了@Async來完美解決這個問題,本文將完成介紹@As

Spring基於Java的配置@Configuration和@Bean用法

Spring中為了減少xml中配置,可以宣告一個配置類(例如SpringConfig)來對bean進行配置。 一、首先,需要xml中進行少量的配置來啟動Java配置: <?xml version="1.0" encoding="UTF-8"?> <bea

spring配置檔案bean標籤init-method和destroy-method和用註解方式配置

Person類 public class Person { private int i = 0; public Person(){ System.out.println("例項化一個物件"