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