spring工厂方法
问题:
1、某一对象A依赖于接口B, 当使用spring为对象A注入接口B的实现类时, 接口B的实现类可能确定,对于这种情况我们怎么处理?
?
2、某一对象A依赖于接口B, 但是接口B的实现类, 依赖于第三方库, 第三方库需要初始化、处理相关的类, 这种情况我们怎么处理?
?
针对上面的情况, 我们可以自己创建一个工厂, 让工厂创建所需要的实现类, 然后注入到对象A中
方法一:静态工厂方法
//静态工厂类public class StaticFactory { //静态工厂方法 public static Bean3 getBean3Instance(String param){System.out.println(param); return new Bean3Impl(); }}//XML文件配置<bean id="bean3" factory-method="getBean3Instance"><!-- 传入工厂方法的参数--><constructor-arg><value>paramvalue</value></constructor-arg>??? </bean>//需要注入bean3的地方??? <bean name="bean" ref="bean3" /> </bean>?
方法二:实例工厂方法
?
public class NoStaticFactory { public Bean3 getBean3Instance() { return new Bean3Impl(); }} <bean id="noStaticFactory" factory-bean="noStaticFactory" factory-method="getBean3Instance"/>
?
?
方法三:继承spring提供的FactoryBean, 实现getObject方法
?
public class Bean3FactoryBean implements FactoryBean{ @Override public Object getObject() throws Exception { return new Bean3Impl(); } @Override public Class getObjectType() { return null; //To change body of implemented methods use File | Settings | File Templates. } @Override public boolean isSingleton() { return false; //To change body of implemented methods use File | Settings | File Templates. }}<bean id="bean3" />factory.getBean("bean3")是获取Bean3接口的实现类, factory.getBean("&bean3")获取Bean3FactoryBean 工厂实例
?