欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

spring FactoryBean实现示例,springfactorybean,spring Facto

来源: javaer 分享于  点击 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]
相关栏目:

用户点评