最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring將一個(gè)的類配置成Bean的方式詳解

 更新時(shí)間:2023年03月20日 09:43:25   作者:王佑輝  
這篇文章主要介紹了Spring將一個(gè)的類配置成Bean的方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧

一、說(shuō)明

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注冊(cè)后置處理器(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存儲(chǔ)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注冊(cè)后置處理器
 **/
@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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

洪湖市| 昌邑市| 尤溪县| 彰化县| 扎鲁特旗| 汉阴县| 沁源县| 库车县| 疏勒县| 慈利县| 黄平县| 建平县| 清涧县| 黄冈市| 密云县| 临洮县| 阿勒泰市| 洪雅县| 泽普县| 平凉市| 新宁县| 大新县| 肥乡县| 洛隆县| 张家港市| 陕西省| 陈巴尔虎旗| 无为县| 文登市| 祁阳县| 靖西县| 关岭| 怀仁县| 阳高县| 萝北县| 阿荣旗| 乌兰县| 永宁县| 古蔺县| 苏尼特右旗| 洪雅县|