Python 官方文档:入门教程 => 点击学习
目录一、说明二、四种方式三、代码示例3.1 @Bean方式3.2 @Bean方式3.3 @Import导入ImportBeanDefinitionReGIStrar实现类3.4 Be
1.第三方的bean不能改写源码,在类上加@Component注解
2.只能引入该类进行反射创建,再更改其BeanDefinition信息
1.@Bean方式,实例化过程可以更改
2.@Import导入类,实例化过程不能干预
3.@Import导入ImportBeanDefinitionRegistrar实现类,可以给BeanDefinition设置属性等信息
4.beanDefinition注册后置处理器(BeanDefinitionRegistryPostProcessor),不需要@Import引入,但顺序在后面
package com.learning.bean;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUsername("root");
return dataSource;
}
}
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 {
}
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);
}
}
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;
@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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: Spring将一个的类配置成Bean的方式详解
本文链接: https://www.lsjlt.com/news/200520.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0