Spring將一個(gè)的類配置成Bean的方式詳解
一、說明
1.第三方的bean不能改寫源碼,在類上加@Component注解
2.只能引入該類進(jìn)行反射創(chuàng)建,再更改其BeanDefinition信息
二、四種方式
1.@Bean方式,實(shí)例化過程可以更改
2.@Import導(dǎo)入類,實(shí)例化過程不能干預(yù)
3.@Import導(dǎo)入ImportBeanDefinitionRegistrar實(shí)現(xiàn)類,可以給BeanDefinition設(shè)置屬性等信息
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導(dǎo)入ImportBeanDefinitionRegistrar實(shí)現(xiàn)類
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生產(chǎn)方式
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 {
}
}
到此這篇關(guān)于Spring將一個(gè)的類配置成Bean的方式詳解的文章就介紹到這了,更多相關(guān)Spring將類配成Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis使用annonation定義類型映射的簡易用法示例
這篇文章主要介紹了MyBatis使用annonation定義類型映射的簡易用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringBoot密碼加密的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot密碼加密的實(shí)現(xiàn)示例,包括引入依賴、配置加密工具、生成加密密鑰、加密密碼、配置解密,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
java 過濾器模式(Filter/Criteria Pattern)詳細(xì)介紹
這篇文章主要介紹了java 過濾器模式(Filter/Criteria Pattern)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10
java8如何根據(jù)某一屬性條件快速篩選list中的集合
這篇文章主要介紹了java8如何根據(jù)某一屬性條件快速篩選list中的集合,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java實(shí)現(xiàn)AES加密算法的簡單示例分享
這篇文章主要介紹了Java實(shí)現(xiàn)AES加密算法的簡單示例分享,AES算法是基于對密碼值的置換和替代,需要的朋友可以參考下2016-04-04
Java實(shí)現(xiàn)常見的排序算法代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)常見的排序算法代碼實(shí)例,按照思路實(shí)現(xiàn)了以下幾個(gè)排序算法(冒泡排序、直接插入排序、直接選擇排序、快速排序),方便日后用到,特此記錄一下,需要的朋友可以參考下2023-11-11

