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"/>
相关文章
相关标签/搜索