系列二十三、将一个第三方的类配置成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

java 复制代码
/**
 * @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)

java 复制代码
/**
 * @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)

java 复制代码
/**
 * @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 {
 
    }
}
相关推荐
一个做软件开发的牛马4 分钟前
Spring Boot Web 开发实战:RESTful API 设计、统一异常处理、参数校验与拦截器
java·后端
yurenpai(27届找实习中)5 分钟前
Feed 流推送与附近商户:从推模式到 GeoHash,一条 Timeline 的完整旅程
java·数据库·oracle·feed
小bo波7 分钟前
Java反射机制——运行时"透视"类的秘密
java·jvm·反射·源码分析·动态代理·进阶·spring底层·框架原理
IT 行者8 分钟前
GitHub Spec Kit 实战(三):写一份能管住所有 spec 的 /speckit.constitution
java·github·ai编程·claude
java1234_小锋9 分钟前
Spring Boot 的核心注解 @SpringBootApplication 由哪三个注解组成?
java·spring boot·后端
::呵呵哒::9 分钟前
在macOS/Linux上优雅管理多个JDK版本:环境变量与别名配置指南
java·linux·macos
Master_Azur9 分钟前
Web后端基础-Spring分层解耦
spring boot·后端·spring
IT 行者11 分钟前
GitHub Spec Kit 实战(二):写一份不偏的 /speckit.specify
java·github·ai编程·claude
就改了14 分钟前
ElasticsearchRestTemplate使用方法详解!!!
java·elasticsearch·springboot
独隅20 分钟前
IntelliJ IDEA 在 Linux 上的完整安装与使用指南
java·linux·intellij-idea