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

相关内容

热门资讯

年入10亿,毛利不输海底捞,又... 订阅 快刀财经 ▲ 做您的私人商学院在经济下行期,餐酒吧生意还好做么?作者 :阿欣来源: 铅笔道(I...
贾国龙怒斥罗永浩恶意煽动公共情... 罗永浩与贾国龙的微博账号已均被禁言。1月16日晚间,在行业的高度关注中,西贝创始人贾国龙并未如外界预...
振芯科技信披违规收警示函,此前... 微成都报道1月14日,振芯科技(300101.SZ)及公司相关负责人因涉违规披露董事会换届信息,收到...
TCL中环拟投资“光伏黑马” ... 中经记者 张英英 吴可仲 北京报道1月16日晚间,TCL中环(002129.SZ)发布公告称,公司正...
靠极致“抠门”,萨莉亚在中国“... 出品|虎嗅商业消费组作者|李佳琪编辑|苗正卿题图|萨莉亚1月初某工作日中午12点30分左右,虎嗅走进...