【spring】将一个第三方的类配成为Bean有哪些方式
创始人
2025-05-30 17:57:04

目录

        • 一、说明
        • 二、四种方式
        • 三、代码示例
          • 3.1 @Bean方式
          • 3.2 @Bean方式
          • 3.3 @Import导入ImportBeanDefinitionRegistrar实现类
          • 3.4 BeanDefinitionRegistryPostProcessor

一、说明

  • 1.第三方的bean不能改写源码,在类上加@Component注解
  • 2.只能引入该类进行反射创建,再更改其BeanDefinition信息

二、四种方式

  • 1.@Bean方式,实例化过程可以更改
  • 2.@Import导入类,实例化过程不能干预
  • 3.@Import导入ImportBeanDefinitionRegistrar实现类,可以给BeanDefinition设置属性等信息
  • 4.beanDefinition注册后置处理器(BeanDefinitionRegistryPostProcessor),不需要@Import引入,但顺序在后面

三、代码示例

3.1 @Bean方式
package com.learning.bean;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @Author wangyouhui* @Description 配置类**/
@Configuration
public class BeanConfig {@Beanpublic DruidDataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setUsername("root");return dataSource;}
}
3.2 @Bean方式
package com.learning.bean;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;/*** @Author wangyouhui* @Description 配置类**/
@Configuration
@Import(DruidDataSource.class)
public class BeanConfig2 {
}
3.3 @Import导入ImportBeanDefinitionRegistrar实现类
package com.learning.bean;import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.type.AnnotationMetadata;/*** @Author wangyouhui* @Description 配置类**/
@Configuration
@Import(ImportBeanDefinitionRegistrar.class)
public class BeanConfig3 {
}class ImportBeanDefinitionRegistrar implements org.springframework.context.annotation.ImportBeanDefinitionRegistrar{@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {// BeanDefinition存储Bean的描述信息,决定Bean生产方式RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(DruidDataSource.class);rootBeanDefinition.getPropertyValues().add("password", "root");registry.registerBeanDefinition("dataSource", rootBeanDefinition);}
}
3.4 BeanDefinitionRegistryPostProcessor
package com.learning.bean;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.stereotype.Component;/*** @Author wangyouhui* @Description beanDefinition注册后置处理器**/
@Component
public class BeanDefinitionRegistryPostProcessor implements org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {RootBeanDefinition beanDefinition = new RootBeanDefinition();beanDefinition.getPropertyValues().add("password", "root");beanDefinitionRegistry.registerBeanDefinition("dataSource", beanDefinition);}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {}
}

相关内容

热门资讯

荷兰怂了?“安世之乱”仍未结束... 11月19日,荷兰经济大臣卡雷曼斯发表声明,表示已“暂停对安世半导体的干预”,并称“鉴于近期事态发展...
北交所第一大忽悠,栽了! 北交... 平地一声惊雷起,又有上市公司骗不下去了,暴富套现梦碎了一地。作者 | 云帆来源 |投资家(ID:to...
V观财报|万里扬:董事胡春荣辞... 【V观财报|万里扬:董事胡春荣辞职】万里扬公告,董事会于近日收到董事胡春荣提交的书面辞职报告,胡春荣...
发行价114.28元/股,摩尔... 11月20日,摩尔线程公告,本次发行股份数量为7000万股,全部为公开发行新股。公告显示,本次网上发...
V观财报|欧派家居:为控股子公... 【V观财报|欧派家居:为控股子公司提供2亿元担保】欧派家居公告,为满足无锡欧派经营发展需求,2025...