欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot中創(chuàng)建bean的7種方式總結(jié)

 更新時間:2023年07月12日 11:20:00   作者:Aqoo  
Spring是一款廣泛應(yīng)用于企業(yè)級應(yīng)用程序開發(fā)的Java框架,其 IOC 和 DI 特性可以有效地管理應(yīng)用程序中的對象,提高了應(yīng)用程序的可維護性和可擴展性,那你知道spring有哪些方式將bean放入容器嘛,今天就給大家總結(jié)一下

spring.factories

使用 spring.factories是springboot加載bean的一種方式,通常用于自動裝配環(huán)境配置相關(guān)的類,和Configuration注解有異曲同工之妙。

其機制和java的SPI機制類似,不同的是其配置規(guī)則 : spring.factories以key,value的鍵值對列表存在。value是類的完全限定類名。類之間用逗號(,)分隔,后面跟著反斜杠(\)和換行符,以提高可讀性。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.AutoConfigurationClass1,\
  com.example.AutoConfigurationClass2

@Configuration + @ComponentScan

@Configuration顧名思義就是我們的環(huán)境配置,標記SpringBoot中的配置類。其一般與其他Spring的相關(guān)配置一起使用。內(nèi)部的話就是我們需要注入到spring容器的bean。

  • 與@Conditiona簇的注解一起使用,用于在標識該類在滿足某種規(guī)則后下生效。
  • 在配置類中我們也可以添加@import注解導入某些類。
  • 一般我們的配置類如果在啟動類包路徑下的話,SpringBoot可以自行裝配,無需其他配置去掃描發(fā)現(xiàn)。但是如果不是的話,則需要配置 @ComponentScan或者 spring.factories文件了。一般我們開發(fā)一個框架的話,推薦使用spring.factories的方式,這樣使用者導入相應(yīng)的jar包(一般是spring-starter包)即可自動裝配相應(yīng)的bean。

如下的nacos中的服務(wù)發(fā)現(xiàn)配置:

@Configuration(proxyBeanMethods = false)
@ConditionalOnDiscoveryEnabled
@ConditionalOnNacosDiscoveryEnabled
public class NacosDiscoveryAutoConfiguration {
	@Bean
	@ConditionalOnMissingBean
	public NacosDiscoveryProperties nacosProperties() {
		return new NacosDiscoveryProperties();
	}
	@Bean
	@ConditionalOnMissingBean
	public NacosServiceDiscovery nacosServiceDiscovery(
			NacosDiscoveryProperties discoveryProperties,
			NacosServiceManager nacosServiceManager) {
		return new NacosServiceDiscovery(discoveryProperties, nacosServiceManager);
	}
}

@Import直接導入類

在Spring框架中,@Import注解用于導入一個或多個配置類或普通的Java類,以便在當前的配置類中使用。它可以在@Configuration注解的類中使用,用于引入其他類的定義,以便在當前類中使用這些定義。

@Import注解一般有以下兩種使用方式:

  • 導入一個或多個配置類:可以使用@Import注解導入其他使用了@Configuration注解的配置類。例如,@Import(MyConfig.class)將會導入名為MyConfig的配置類。
  • 導入普通的Java類:可以使用@Import注解導入非配置類的Java類,以便在當前配置類中使用該類的實例。例如,@Import(MyService.class)將會導入名為MyService的普通Java類。
  • Import只能在類上使用。
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ RabbitTemplate.class, Channel.class })
@EnableConfigurationProperties(RabbitProperties.class)
@Import({ RabbitAnnotationDrivenConfiguration.class, RabbitStreamConfiguration.class })
public class RabbitAutoConfiguration {
    ...
}

上述配置示例就又導入了兩個配置類:RabbitAnnotationDrivenConfiguration,RabbitStreamConfiguration。

@Bean

注解@Bean一般用于向spring中注入一個比較復雜的bean,這個bean一般配置復雜,功能多。它也是我們使用的最多的一種方式。它有以下幾個特點:

  • 可以指定bean的名稱:可以使用name屬性指定bean的名稱。如果未指定名稱,則將使用方法名作為bean的名稱。
  • 可以指定bean的作用域:可以使用@Scope注解指定bean的作用域。默認情況下,bean的作用域為單例(即在整個應(yīng)用程序上下文中只有一個實例)。
  • 可以指定bean的初始化和銷毀方法:可以使用@PostConstruct和@PreDestroy注解指定bean的初始化和銷毀方法。
@Configuration
public class MyConfiguration {
    @Bean
    public User user() {
        User user = new User();
        User.setName("凹凸曼");
        return user;
    }
}

@Componet + @ComponentScan

@Componet注解也是我們使用的比較多的注解,可能我這樣說你比較疑惑。但是@Controller,@Service,@Repository這些注解你熟悉吧,他們都是基于@Componet實現(xiàn)的。其和@ComponentScan注解搭配使用,通過掃描某個包路徑來實現(xiàn)導入。

FactoryBean接口

FactoryBean千萬不要和BeanFactory搞混了喔。BeanFactory是spring的bean管理工廠用于管理Spring中的bean的,它是IOC容器的頂級接口,。FactoryBean是用來創(chuàng)建復雜的或自定義bean的。

FactoryBean接口有兩個主要方法:

  • T getObject():該方法返回由工廠創(chuàng)建的對象實例。
  • Class<?> getObjectType():該方法返回由工廠創(chuàng)建的對象的類型。

我們來看一個列子:

@Configuration
public class TestConfiguration {
    @Bean
    public UserFactoryBean userFactoryBean() {
        return new UserFactoryBean();
    }
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(TestConfiguration.class);
        Person bean = applicationContext.getBean(User.class);
        System.out.println(bean);
    }
}
class UserFactoryBean implements FactoryBean<User> {
    /**
     *  直接new出來User進行返回.
     */
    @Override
    public User getObject() throws Exception {
        return new User();
    }
    /**
     *  指定返回bean的類型.
     */
    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
}

BeanDefinitionRegistryPostProcessor

這個提供的一個擴展點,BeanDefinitionRegistryPostProcessor接口是spring提供的一個擴展點,用于允許開發(fā)者在應(yīng)用程序上下文啟動時動態(tài)修改或注冊bean定義。它允許開發(fā)者在應(yīng)用程序上下文創(chuàng)建bean之前對bean定義進行更改或添加新的bean定義。

class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
        registry.registerBeanDefinition("user", beanDefinition);
    }
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    }
}

總結(jié)

上訴我們一共介紹了7種創(chuàng)建bean的方式,希望對大家有所幫助,以上內(nèi)容就到這里,感謝各位看官老爺們的觀看,如果覺得寫得好,給個贊支持一下哈?。?!

到此這篇關(guān)于SpringBoot中創(chuàng)建bean的7種方式總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot創(chuàng)建bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何讓Spring Rest 接口中路徑參數(shù)可選

    如何讓Spring Rest 接口中路徑參數(shù)可選

    這篇文章主要介紹了如何讓Spring Rest 接口中路徑參數(shù)可選,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中常用的設(shè)計模式之建造者模式詳解

    Java中常用的設(shè)計模式之建造者模式詳解

    這篇文章主要為大家詳細介紹了Java中常用的設(shè)計模式之建造者模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    Spring Boot提供的默認異常處理機制通常并不一定適合我們實際的業(yè)務(wù)場景,因此,我們通常會根據(jù)自身的需要對Spring Boot全局異常進行統(tǒng)一定制,例如定制錯誤頁面,定制錯誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯誤頁面的實現(xiàn),快來學習吧
    2021-12-12
  • MyBatis編寫一個簡單的SQL生成工具

    MyBatis編寫一個簡單的SQL生成工具

    MyBatis 是一個強大的數(shù)據(jù)持久化框架,它提供了一種半自動化的 ORM 實現(xiàn)方式,本文將為大家介紹如何使用MyBatis編寫一個簡單的SQL生成工具,需要的可以了解下
    2025-03-03
  • 一步步教你如何使用Java實現(xiàn)WebSocket

    一步步教你如何使用Java實現(xiàn)WebSocket

    websocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議,它實現(xiàn)了瀏覽器與服務(wù)器的全雙工通訊-允許服務(wù)器主動發(fā)起信息個客戶端,websocket是一種持久協(xié)議,http是非持久協(xié)議,下面這篇文章主要給大家介紹了關(guān)于如何使用Java實現(xiàn)WebSocket的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • SpringBoot Admin使用及心跳檢測原理分析

    SpringBoot Admin使用及心跳檢測原理分析

    這篇文章主要介紹了SpringBoot Admin使用及心跳檢測原理分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java FileInputStream與FileOutputStream使用詳解

    Java FileInputStream與FileOutputStream使用詳解

    這篇文章主要介紹了Java FileInputStream與FileOutputStream使用詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案

    在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數(shù)據(jù)庫表與 Java 對象,這篇文章主要介紹了MySQL 新增字段但 Java 實體未更新:潛在問題與解決方案,需要的朋友可以參考下
    2025-04-04
  • mybatis日志打印的兩款I(lǐng)DEA插件推薦

    mybatis日志打印的兩款I(lǐng)DEA插件推薦

    這篇文章主要給大家推薦介紹了關(guān)于mybatis日志打印的兩款I(lǐng)DEA插件,文中通過圖文以及實例代碼介紹的非常詳細,對大家學習或者使用mybatis具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • 簡單了解java類型轉(zhuǎn)換常見的錯誤

    簡單了解java類型轉(zhuǎn)換常見的錯誤

    這篇文章主要介紹了簡單了解java類型轉(zhuǎn)換常見的錯誤,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04

最新評論