spring bean 工廠

1. 使用構造器java

<bean id="sysUserService" class="com.xykj.blank.service.impl.SysUserServiceImpl"/>

2.使用靜態工廠spring

<bean id="sysUserService" class="com.xykj.blank.service.StaticFactoryBean" 
factory-method="getSysUserService"></bean>
public class StaticFactoryBean {

    public static SysUserService getSysUserService(){
        return new SysUserServiceImpl();
    }

}

3.實例工廠sql

<bean id="factoryBean" class="com.xykj.blank.service.FactoryBean"/>
<bean id="sysUserService" factory-bean="factoryBean" factory-method="getSysUserService"/>
public class FactoryBean {

    public  SysUserService getSysUserService(){
        return new SysUserServiceImpl();
    }
}

 

4. 實現  org.springframework.beans.factory.FactoryBeanide

<bean id="sysUserService" class="com.xykj.blank.service.FactoryBean"/>
public class FactoryBean implements org.springframework.beans.factory.FactoryBean<SysUserService> {


    @Override
    public SysUserService getObject() throws Exception {
        return new SysUserServiceImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return SysUserServiceImpl.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

 

spring 自帶 的FactoryBeanthis

MethodInvokingFactoryBean  調用普通方法code

用法 :xml

public final class Helper {
    private static Secret secret;
    private Helper () {}

    public static void setSecret(Secret secret) {
       this.secret = secret;
    }
}

 以下代碼,如何設置 Secret ?
 對象

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" >
    <property name="staticMethod" value="com.aa.bb.Helper.setSecret"/>
    <property name="arguments">
        <list>
            <ref bean="secret"/>
        </list>
    </property>
</bean>

PropertyPathFactoryBean  調用getter方法get

<bean id="person" class="Person">
  <property name="age" value="30"/>
  <property name="son">
  	<bean class="Son">
  		<property name="age" value="11"/>
  	</bean>
  </property>
</bean>
<!-- 獲取 person中的son值,即調用person.getSon() -->
<bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
	<property name="targetBeanName" value="person" />
	<property name="propertyPath" value="son"/>
</bean>

<!-- 獲取 person中的son值,即調用person.getSon().getAge() -->
<bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
	<property name="targetBeanName" value="person" />
	<property name="propertyPath" value="son.age"/>
</bean>

<!-- 獲取person中son的age值,注入其餘bean中 -->
<bean class="Other" >
  <property name="age">
  	<!-- person.son.age 表示 取person.getSon().getAge() -->
  	<bean id="person.son.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
  </property>
</bean>

<!-- PropertyPathFactoryBean 縮寫 -->
<util:property-path id="beanId" path="person.son.age">

FieldRetrievingFactoryBean  訪問類或對象的Field值,包括靜態域io

<bean class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
	<property name="staticField" value="java.sql.Connection.TRSD">
</bean>

<!-- 做爲值 -->
<bean>
	<proerty>
		<bean id="java.sql.Connection.TRSD" 
			class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" />
	</property>
</bean>
<!-- 縮寫 -->
<util:constant static-field="java.sql.Connection.TRSD"/>
相關文章
相關標籤/搜索