当前位置: 首页 > article >正文

系列二十三、将一个第三方的类配置成bean的方式

一、将一个第三方的类配置成bean的方式

1.1、概述

        日常的JavaEE开发中,难免不会遇到需要使用第三方的类的情况,比如:MyBatisPlus、RedisTemplate、DruidDataSource...,这些外部组件是不同的组织或个人提供的,我们为什么可以直接使用呢?这就涉及到了如何将一个第三方的类配置成bean的方式的问题,常见的方式如下:

@Autowired、@Resource、@Bean、@Import(xxx.Class)、@Import(xxxImportBeanDefinitionRegistrar.class)、@Import(xxxBeanDefinitionRegistryPostProcessor.class),下面分别使用代码进行介绍(省略@Autowired、@Resource):

1.2、@Bean 

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/10/26 9:50
 * @Description:
 */
@Configuration
@ComponentScan(basePackages = "org.star")
public class MySpringConfig {
 
    /**
     * 方式一:通过@Bean的方式将一个第三方的类注册成bean
     * 优点:能控制bean的创建过程
     * @return
     */
    @Bean
    public DruidDataSource druidDataSource() {
        return new DruidDataSource();
    }
 
}

1.3、@Import(xxx.Class)

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/10/26 9:50
 * @Description: 方式二:通过@Import(第三方类.class)将一个第三方的类注册为bean
 * 缺点:无法干预bean的实例化过程
 */
@Configuration
@ComponentScan(basePackages = "org.star")
@Import(DruidDataSource.class)
public class MySpringConfig {
 
}

1.4、@Import(xxxImportBeanDefinitionRegistrar.class)

参考 系列二十一、Spring中bean的创建顺序 #2.2.7节 中的案例。

1.5、 @Import(xxxBeanDefinitionRegistryPostProcessor.class)

/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/10/27 18:52
 * @Description:
 */
@Component
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
 
    /**
     * 作用:动态注册BeanDefinition
     * 调用时机:IOC加载时注册BeanDefinition的时候会调用
     * @param registry the bean definition registry used by the application context
     * @throws BeansException
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        RootBeanDefinition definition = new RootBeanDefinition(DruidDataSource.class);
        MutablePropertyValues propertyValues = definition.getPropertyValues();
        propertyValues.add("username","admin");
        propertyValues.add("password","admin123456");
        registry.registerBeanDefinition("druidDataSource",definition);
    }
 
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
 
    }
}


http://www.kler.cn/a/146571.html

相关文章:

  • vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建
  • 网络安全——常用语及linux系统
  • Go语言中http.Transport的Keep-Alive配置与性能优化方法
  • 【蓝牙】win11 笔记本电脑连接 hc-06
  • 【漏洞分析】DDOS攻防分析
  • ubuntu支持中文的字体
  • 树莓派 cpolar实现内网穿透
  • git 泄露
  • SpringCloud实用-OpenFeign整合okHttp
  • Vue3:利用vueusejs键盘绑定
  • 创建可以离线打包开发的uniapp H5项目
  • MySQL数据库 编程入门
  • 【Python】使用globals()函数成功解决tkinter多个新窗口问题
  • hdlbits系列verilog解答(Exams/m2014 q4h)-44
  • ros2智能小车中STM32地盘需要用到PWM的模块
  • C++——解锁string常用接口
  • Flutter桌面应用开发之毛玻璃效果
  • Google codelab WebGPU入门教程源码<4> - 使用Uniform类型对象给着色器传数据(源码)
  • C#,《小白学程序》第一课:初识程序,变量,数据与显示
  • 时间序列预测 — LSTM实现多变量多步负荷预测(Keras)
  • 【计算机基础】通过插件plantuml,实现在VScode里面绘制状态机
  • Linux C语言 27-递归
  • 【多线程】-- 04 静态代理模式
  • 蓝桥杯每日一题2023.11.25
  • pop链反序列化 [MRCTF2020]Ezpop1
  • AIGC系列之:Transformer原理及论文解读