溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Spring?Bean的定義概念和使用方法是什么

發(fā)布時間:2023-04-11 15:16:56 來源:億速云 閱讀:90 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Spring Bean的定義概念和使用方法是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

定義

Spring bean 對象是構(gòu)成應(yīng)用程序的支柱,也是由 Spring IoC 容器管理的。bean 是一個被實(shí)例化,組裝,并通過 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系列
注解說明
@Component最普通的一個注解,一般用于把普通pojo實(shí)例化到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”獲取實(shí)例時,F(xiàn)actoryBean會調(diào)用getObject()方法;

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

當(dāng)通過Demo.class來獲取bean實(shí)例時,調(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;
    }
}

“Spring Bean的定義概念和使用方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI