spring FactoryBean实现示例,springfactorybean,spring Facto
分享于 点击 40493 次 点评:72
spring FactoryBean实现示例,springfactorybean,spring Facto
spring FactoryBean顾名思义,就是用来生成bean的工厂类。
我们举个例子来说明如何使用它。
假定我们有一个bean类EmployeeDTO :
package cn.outofmemory;public class EmployeeDTO { private Integer id; private String firstName; private String lastName; private String designation; //Setters and Getters are hidden behind this comment. @Override public String toString() { return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", type=" + designation + "]"; }}
假定我们要用一个FactoryBean来生成EmployDTO的bean, FactoryBean最好从AbstractFactoryBean继承。
如下代码:
package cn.outofmemory;import org.springframework.beans.factory.config.AbstractFactoryBean;import com.howtodoinjava.demo.model.EmployeeDTO;public class EmployeeFactoryBean extends AbstractFactoryBean<Object>{ private String designation; public String getDesignation() { return designation; } public void setDesignation(String designation) { this.designation = designation; } //This method will be called by container to create new instances @Override protected Object createInstance() throws Exception { EmployeeDTO employee = new EmployeeDTO(); employee.setId(-1); employee.setFirstName("dummy"); employee.setLastName("dummy"); //Set designation here employee.setDesignation(designation); return employee; } //This method is required for autowiring to work correctly @Override public Class<EmployeeDTO> getObjectType() { return EmployeeDTO.class; }}
有了这个FactoryBean我们就可以通过它来配置spring生成EmployDTO的方式。
如下spring配置:
<bean id="manager" class="cn.outofmemory.EmployeeFactoryBean"> <property name="designation" value="Manager" /></bean><bean id="director" class="cn.outofmemory.EmployeeFactoryBean"> <property name="designation" value="Director" /></bean>
我们可以写个测试来验证下:
public class TestSpringContext{ @SuppressWarnings("resource") public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); EmployeeDTO manager = (EmployeeDTO) context.getBean("manager"); System.out.println(manager); EmployeeDTO director = (EmployeeDTO) context.getBean("director"); System.out.println(director); }}
输出:
Employee [id=-1, firstName=dummy, lastName=dummy, type=Manager]Employee [id=-1, firstName=dummy, lastName=dummy, type=Director]
用户点评