【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 {}
}

相关内容

热门资讯

<必备教程>... "名途娱乐为什么一直输"科技曝光(果然有挂)您好:名途娱乐这款游戏可以开挂,确实是有挂的,需要了解加...
玩家必备分享~"同城... 玩家必备分享~"同城字牌 到底有没有挂"2025(果然有挂)您好:同城字牌 这款游戏可以开挂,确实是...
「最新一款」永盈.有挂吗@确实... 「最新一款」永盈.有挂吗@确实真的有挂您好:永盈这款游戏可以开挂,确实是有挂的,需要了解加客服微信【...
最新消息“ 钱塘十三水有没有开... 您好:钱塘十三水这款游戏可以开挂,确实是有挂的,需要软件加微信【6676724】很多玩家在这款游戏中...
黄金“消费补贴”来了!上海、郑... 红星资本局6月10日消息,近日,郑州市“郑好办”平台联合本土黄金企业乾昌珠宝,推出黄金珠宝专项消费补...