③【Spring】整合第三框架的常用机制:FactoryBean

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述


一、什么是 FactoryBean ?


FactoryBean 是 Spring 提供的一种整合第三方框架的常用机制。

当获取普通的bean时,得到的是我们在bean标签中class属性所配置的类的对象;

当获取FactoryBean类型的bean,得到的是getObject()方法的返回值,这个返回值是可由开发者自定义的。

通过这种机制,Spring 可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来,只把最简洁的使用界面展示给我们。





二、实现 FactoryBean 接口


  • 创建一个FactoryBean 的实现类,重写其抽象方法。
  • 实现FactoryBean接口时需要指定泛型
  • 泛型类型就是当前工厂要生产的对象的类型
package com.haojin.ioc.demo;

import org.springframework.beans.factory.FactoryBean;

/**
 * @author .29.
 * @create 2023-01-19 11:54
 */
//由FactoryBean的泛型决定bean获取到的对象
public class MyFactoryBean implements FactoryBean<service> {
    private String serviceName;

    public String getServiceName() {
        return serviceName;
    }

    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }

    @Override
    public service getObject() throws Exception {
        //这里模拟创建、设置一个对象的过程
        service service = new service();
        service.setServiceName(this.serviceName);
        return service;
    }

    @Override
    public Class<?> getObjectType() {
        //返回要生产的对象类型
        return service.class;
    }
}



XML配置文件中配置bean

class属性:com.haojin.ioc.demo.MyFactoryBean
    <bean id="myFactoryBean" class="com.haojin.ioc.demo.MyFactoryBean">
        <!--依旧可以通过setXxx()方式注入属性值-->
        <property name="serviceName" value=".29."></property>
    </bean>


测试FactoryBean效果

getBean()获取的类型并非:MyFactoryBean,而是FactoryBean接口泛型类型:service
public class testFactoryBean {
    @Test
    public void test(){
        //class属性设置的是:MyFactoryBean,这里bean获取到的是service
        ApplicationContext factorybean =
                new ClassPathXmlApplicationContext("factorybean.xml");
        service myFactoryBean = factorybean.getBean("myFactoryBean", service.class);

        System.out.println(myFactoryBean);
        System.out.println(myFactoryBean.getServiceName());
    }
}

在这里插入图片描述




在这里插入图片描述

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.29.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值