携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
上一篇文章我们介绍了怎么使用xml 以静态工厂方法的方式进行bean 的依赖注入和依赖关系绑定。这篇文章我们介绍如何使用非静态工厂方法来完成上述内容。
使用非静态工厂方法在xml 中进行bean 的注册和依赖绑定
通过上一篇文章我们知道,可以通过静态工厂方法的实现类中的方法的调用的结果作为bean 注册到容器中,相同的道理,我们自然会想到,应该同样可以使用非静态工厂方法完成相同的功能。当然,表达方式肯定需要改变一下。
首先我们定义一个非静态工厂方法实现类,如下:
public class NonStaticDependentedInterfaceFactory {
public DependentInterface getInstance() {
return new DependentedInterfaceImpl();
}
}
我们发现,工厂方是一个非静态方法,所以在java 的使用过程中,我们都知道,想要调用这个方法,就要有一个类NonStaticDependentedInterfaceFactory 的实例来调用这个非静态工厂方法。但是在spirng 中是容器进行调用,于是就应该是这种配置信息:
<bean id = "test" class = "xxxxxxx.Test">
<property name = "dependentInterface">
<ref bean = "dependent"/>
</property>
</bean>
<bean id = "factory" class = "xxxxx.NonStaticDependentedInterfaceFactory"/>
<bean id = "dependent" factory-bean = "factory" factory-method = "getInstance"/>
从上面的文字中我们可以知道,NonStaticDependentedInterfaceFactory 类是作为一个正常的bean 注册到容器中的。但是对于dependent 的定义却是和上文所述的静态工厂方法中的实例有所不同。
如果我们还记得上一篇文章中的内容我们就可以很清晰地看出区别,这种使用非静态工厂方法的实现方式是使用factory-bean 属性标签来指定这个工厂方法所在的工厂类实例(在静态工厂方法的实现方式中,是使用class 属性标签来指定工厂方法所在类的类型);对于指定工厂方法名的方式则相同,都是通过factory-method 属性标签来完成的。
另外需要说的是,如果使用非静态工厂方法的实现方式实现带参数的工厂方法的时候,处理方式和静态工厂方法类似,即都可以通过<construct-arg> 标签来完成。
总结
这篇文章我们介绍了另外一种使用非静态工厂方法在xml 中进行bean 的注册和依赖绑定的方式。下一篇文章我们来介绍FactoryBean 是什么。