这篇“Spring怎么将一个的类配置成Bean”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring怎么将一个的类配置成Bean”文章吧。
一、说明
第三方的bean不能改写源码,在类上加@Component注解
只能引入该类进行反射创建,再更改其BeanDefinition信息
二、四种方式
@Bean方式,实例化过程可以更改
@Import导入类,实例化过程不能干预
@Import导入ImportBeanDefinitionRegistrar实现类,可以给BeanDefinition设置属性等信息
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;@Configurationpublic 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;@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;@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;@Componentpublic 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”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。