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

Spring Bean的定義及三種創(chuàng)建方式

 更新時間:2023年07月04日 11:31:54   作者:熊貓Jay  
本文主要介紹了Spring容器獲取Bean的9種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

定義

Spring bean 對象是構(gòu)成應(yīng)用程序的支柱,也是由 Spring IoC 容器管理的。bean 是一個被實例化,組裝,并通過 Spring IoC 容器所管理的對象。這些 bean 是由用容器提供的配置元數(shù)據(jù)創(chuàng)建的。

創(chuàng)建Bean

基于XML配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ?http://www.springframework.org/schema/beans/spring-beans.xsd">
? ? <bean id="beanDemoJay" class="demo.BeanDemoJay"/>
</beans>

基于注解掃描的配置

從 Spring 2.5 開始就可以使用注解來配置依賴注入,在可以使用基于注解的配置之前,我們將需要在我們的 Spring 配置文件中啟用它。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ?xmlns:context="http://www.springframework.org/schema/context"
? ? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ?http://www.springframework.org/schema/beans/spring-beans.xsd
? ? ? ?http://www.springframework.org/schema/context
? ? ? ?http://www.springframework.org/schema/context/spring-context.xsd">
? ? <!-- 開啟基于注解的配置 -->
? ? <context:annotation-config/>
? ? <!-- bean definitions go here -->
</beans>

當(dāng)開啟后,將可以在代碼上使用注解,這表明 Spring 應(yīng)該自動連接值到屬性,方法和構(gòu)造函數(shù)。如下是常用的注解:

序號說明
1@Required 注解應(yīng)用于 bean 屬性的 setter 方法。
2@Autowired 注解可以應(yīng)用到 bean 屬性的 setter 方法,非 setter 方法,構(gòu)造函數(shù)和屬性。
3@Qualifier通過指定確切的將被連線的 bean,@Autowired 和 @Qualifier 注解可以用來刪除混亂。
4JSR-250 AnnotationsSpring 支持 JSR-250 的基礎(chǔ)的注解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 注解。

基于Java的配置

基于 Java 的配置,可以使你在不用配置 XML 的情況下編寫大多數(shù)的 Spring,主要通過 @Configuration 和 @Bean 等注解。

注解說明
@Component最普通的一個注解,一般用于把普通pojo實例化到spring容器中。@Controller 和 @Service 和@Repository 是它的特殊情況,只是作為一個普通的類,不需要特殊歸類時,比較適合采用@Component注解。
@Controller用于標(biāo)注控制層,表示向控制層注入服務(wù)層的數(shù)據(jù)
@Service用于標(biāo)注服務(wù)層,來進(jìn)行業(yè)務(wù)的邏輯處理,在服務(wù)層注入DAO層數(shù)據(jù)
@Repository用于標(biāo)注數(shù)據(jù)訪問層,也可以說用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件
@Configuration用于定義配置類,可替換xml配置文件,也可以理解為Spring配置文件當(dāng)中的上下文。

依附于@Configuration的注解

@Bean 創(chuàng)建Deom

@Configuration
public class Demo {
    @Bean
    public Demo demo(){
        return new Demo();
    }
}

@Import 創(chuàng)建Cofing

@Configuration
@Import(Config.class)
public class Demo {
}

@Import.ImportSelector 選擇器,傳入@Import注解所在類Demo上所有的注解信息,返回要導(dǎo)入的類名

@Configuration
@Import(ImportSelector_.class)
public class Demo {   
}
public class ImportSelector_ implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.spring.demo.beanlifecycle.Demo"};
    }
}

@Impport.ImportBeanDefinitionRegistrar Bean定義注冊器,傳入@Import注解所在類Demo上所有的注解信息:

Mybatis的Mapper接口就是用這種方式將Bean定義注冊到Spring上下文的

@Configuration
@Import(ImportBeanDefinitionRegistrar_.class)
public class Demo {
}
public class ImportBeanDefinitionRegistrar_ implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Bean.class).setInitMethodName("init").setDestroyMethodName("destroy").getBeanDefinition();
        registry.registerBeanDefinition("bean", beanDefinition);
        System.out.println("registerBeanDefinitions: " + beanDefinition);
    }
}

FactoryBean

當(dāng)通過“factoryBean”獲取實例時,F(xiàn)actoryBean會調(diào)用getObject()方法;

當(dāng)通過“&factoryBean”獲取實例時,返回FactoryBean的實例;

當(dāng)通過Demo.class來獲取bean實例時,調(diào)用factoryBean的getObjectTyoe()來獲取類型。

@Configuration
public class Demo {
    @Bean
    public FactoryBean_ factoryBean(){
        return new FactoryBean_();
    }
}
public class FactoryBean_ implements FactoryBean {
    @Override
    public Object getObject() throws Exception {
        return new Demo();
    }
    @Override
    public Class<?> getObjectType() {
        return Demo.class;
    }
}

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

相關(guān)文章

  • 詳解Spring Boot 使用Spring security 集成CAS

    詳解Spring Boot 使用Spring security 集成CAS

    本篇文章主要介紹了詳解Spring Boot 使用Spring security 集成CAS,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringBoot注冊Servlet的三種方法詳解

    SpringBoot注冊Servlet的三種方法詳解

    這篇文章主要介紹了SpringBoot注冊Servlet的三種方法詳解,教你如何Spring Boot 注冊 Servlet、Filter、Listener,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Java字符串常量池和intern方法解析

    Java字符串常量池和intern方法解析

    本文主要介紹了Java字符串常量池和intern方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題

    解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題

    這篇文章主要介紹了解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • idea導(dǎo)入項目不顯示maven側(cè)邊欄的問題及解決方法

    idea導(dǎo)入項目不顯示maven側(cè)邊欄的問題及解決方法

    這篇文章主要介紹了idea導(dǎo)入項目不顯示maven側(cè)邊欄的問題及解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 詳解Mybatis 傳遞參數(shù)類型為List的取值問題

    詳解Mybatis 傳遞參數(shù)類型為List的取值問題

    這篇文章主要介紹了詳解Mybatis 傳遞參數(shù)類型為List的取值問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java如何獲取@TableField,@TableName注解的值

    Java如何獲取@TableField,@TableName注解的值

    這篇文章主要介紹了Java如何獲取@TableField,@TableName注解的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot部署到外部Tomcat無法注冊到Nacos服務(wù)端的解決思路

    SpringBoot部署到外部Tomcat無法注冊到Nacos服務(wù)端的解決思路

    這篇文章主要介紹了SpringBoot部署到外部Tomcat無法注冊到Nacos服務(wù)端,本文給大家分享完美解決思路,結(jié)合實例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • 詳解如何把cmd黑窗口把java文件打包成jar

    詳解如何把cmd黑窗口把java文件打包成jar

    本文主要介紹了如何把cmd黑窗口把java文件打包成jar,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • SpringBoot項目Web攔截器使用的多種方式

    SpringBoot項目Web攔截器使用的多種方式

    在Spring?Boot應(yīng)用中,Web攔截器(Interceptor)是一種用于在請求處理的不同階段執(zhí)行自定義邏輯的機(jī)制,下面給大家介紹SpringBoot項目Web攔截器使用的多種方式,感興趣的朋友一起看看吧
    2025-05-05

最新評論

和林格尔县| 潞城市| 沙雅县| 桐庐县| 新乡市| 鸡泽县| 札达县| 隆德县| 新闻| 宜丰县| 团风县| 黔西| 临湘市| 雅江县| 克东县| 无棣县| 麻江县| 平邑县| 阿拉尔市| 高要市| 姚安县| 韶关市| 彭州市| 崇州市| 顺义区| 肇源县| 册亨县| 南澳县| 瓦房店市| 察雅县| 苍溪县| 巩义市| 九寨沟县| 达孜县| 西宁市| 六安市| 扬州市| 千阳县| 兴宁市| 寻甸| 大埔区|