Spring将一个的类配置成Bean的方式详解

 更新时间:2023年03月20日 09:43:25   作者:王佑辉  
这篇文章主要介绍了Spring将一个的类配置成Bean的方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

一、说明

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 {
	@Bean
	public 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{
    @Override
    public 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 {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        RootBeanDefinition beanDefinition = new RootBeanDefinition();
        beanDefinition.getPropertyValues().add("password", "root");
        beanDefinitionRegistry.registerBeanDefinition("dataSource", beanDefinition);
    }
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
    }
}

到此这篇关于Spring将一个的类配置成Bean的方式详解的文章就介绍到这了,更多相关Spring将类配成Bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java如何连接数据库图文教程

    Java如何连接数据库图文教程

    关于java数据库的文章早已是非常多了,本文是对我个人过往学习java数据库,理解及应用java数据库的一个总结,下面这篇文章主要给大家介绍了关于Java如何连接数据库的相关资料,需要的朋友可以参考下
    2023-04-04
  • 细谈java同步之JMM(Java Memory Model)

    细谈java同步之JMM(Java Memory Model)

    Java内存模型是在硬件内存模型上的更高层的抽象,它屏蔽了各种硬件和操作系统访问的差异性,保证了Java程序在各种平台下对内存的访问都能达到一致的效果。下面我们来一起学习下JMM
    2019-05-05
  • SpringBoot中JPA更新时部分字段无效

    SpringBoot中JPA更新时部分字段无效

    本文主要介绍了SpringBoot中JPA更新时部分字段无效,在通过注解自动更新时,部分字段在调试时可以找到,却没有被自动更新到数据库中,下面就介绍一下解决方法
    2023-04-04
  • Intellij IDEA使用restclient测试的教程图解

    Intellij IDEA使用restclient测试的教程图解

    这篇文章主要介绍了Intellij IDEA使用restclient测试的教程图解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Java split函数拆分后变成null问题解决方案

    Java split函数拆分后变成null问题解决方案

    这篇文章主要介绍了Java split函数拆分后变成null问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java 实现二叉搜索树的查找、插入、删除、遍历

    Java 实现二叉搜索树的查找、插入、删除、遍历

    本文主要介绍了Java实现二叉搜索树的查找、插入、删除、遍历等内容。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • 详解Java如何实现一个像String一样不可变的类

    详解Java如何实现一个像String一样不可变的类

    说到 String 大家都知道 String 是一个不可变的类;虽然用的很多,那不知道小伙伴们有没有想过怎么样创建一个自己的不可变的类呢?这篇文章就带大家来实践一下,创建一个自己的不可变的类
    2022-11-11
  • SpringBoot系列教程JPA之基础环境搭建的方法

    SpringBoot系列教程JPA之基础环境搭建的方法

    这篇文章主要介绍了SpringBoot系列教程JPA之基础环境搭建的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Dubbo本地调试的几种方式总结

    Dubbo本地调试的几种方式总结

    dubbo服务方启动时需要加载的东西太多,如果跑单元测试把服务开启会浪费不少时间,而且单元测试没法保持服务一直开启的状态,这篇文章主要给大家介绍了关于Dubbo本地调试的几种方式,需要的朋友可以参考下
    2022-11-11
  • springboot bean扫描路径的实现

    springboot bean扫描路径的实现

    这篇文章主要介绍了springboot bean扫描路径的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论