spring bean 工厂

1. 使用构造器

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

2.使用静态工厂

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

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

}

3.实例工厂

<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.FactoryBean

 <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 自带 的FactoryBean

MethodInvokingFactoryBean  调用普通方法

用法 :

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方法

<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值,包括静态域

<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"/>

 

 

转载于:https://my.oschina.net/u/2552286/blog/1561204

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值