spring------FactoryBean自定义实例化bean的构造方式

本文介绍了如何在Spring中使用FactoryBean来自定义bean的实例化过程。通过创建实体类Teacher,配置XML文件,并自定义TeacherFactoryBean,实现了在初始化bean时添加额外的扩展。在测试中,展示了通过FactoryBean的getObject()方法获取对象,以及如何获取FactoryBean本身。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天我们实现一个小的功能,spring中通过配置bean标签,然后就可以加载解析了,但由的时候,某个bean我们希望通过自己定义的方法来构造对象,这样我们可以加入自己的一些扩展。

创建实体类 Teacher

public class Teacher {
    private String nane;
    private int age;
    public String getNane() {
        return nane;
    }

    public void setNane(String nane) {
        this.nane = nane;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Teacher(String nane, int age) {
        this.nane = nane;
        this.age = age;
    }

    public Teacher() {
    }
}

xml 文件

<?xml version="1.0" encoding="UTF-8"?>

<!-- 1.IoC控制反转
        创建对象,通过bean元素声明需要Spring实例,即对象,id为实例指定名称,class指明了对象的类型 -->
<bean id="student" class="com.example.spring.Student" scope="singleton">
    <property name="nane" value="旭东"></property>
    <property name="age" value="23"></property>
</bean>
<bean id="teacher" class="com.example.spring.TeacherFactoryBean" p:str="旭东,23"></bean>

student 是正常的注入,teacher 用我们自己定义的,str 是我们自己定义属性,

TeacherFactoryBean

public class TeacherFactoryBean implements FactoryBean<Teacher> {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    @Override
    public Teacher getObject() throws Exception {
        if(!StringUtils.isEmpty(this.str)) {
            String[] info = str.split(",");
            Teacher teacher = new Teacher();
            teacher.setNane(info[0]);
            teacher.setAge(Integer.parseInt(info[1]));
            return teacher;
        }
        return null;
    }

    @Override
    public Class<?> getObjectType() {
        return Teacher.class;
    }
}

测试

    public static void main(String[] args) {
        BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("ApplicationContext.xml"));
        Teacher teacher = (Teacher) beanFactory.getBean("teacher");
        System.out.println(teacher);
        TeacherFactoryBean obj = beanFactory.getBean("&teacher",TeacherFactoryBean.class);
        System.out.println(obj.getStr());
    }

com.example.spring.Teacher@29ca901e
旭东,23

总结

这种方式的对象来源是 TeacherFactoryBean 的getObject()方法,特别注意的是: getBean获取的是 Teacher对象,如果要获取TeacherFactoryBean ,则要在getBean的参数前边加上 “&“。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值