Spring Bean的定義概念和使用
定義
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>
當開啟后,將可以在代碼上使用注解,這表明 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 注解可以用來刪除混亂。 |
4 | JSR-250 AnnotationsSpring 支持 JSR-250 的基礎(chǔ)的注解,其中包括了 @Resource,@PostConstruct 和 @PreDestroy 注解。 |
基于Java的配置
基于 Java 的配置,可以使你在不用配置 XML 的情況下編寫大多數(shù)的 Spring,主要通過 @Configuration 和 @Bean 等注解。
Component系列
注解 | 說明 |
---|---|
@Component | 最普通的一個注解,一般用于把普通pojo實例化到spring容器中。@Controller 和 @Service 和@Repository 是它的特殊情況,只是作為一個普通的類,不需要特殊歸類時,比較適合采用@Component注解。 |
@Controller | 用于標注控制層,表示向控制層注入服務(wù)層的數(shù)據(jù) |
@Service | 用于標注服務(wù)層,來進行業(yè)務(wù)的邏輯處理,在服務(wù)層注入DAO層數(shù)據(jù) |
@Repository | 用于標注數(shù)據(jù)訪問層,也可以說用于標注數(shù)據(jù)訪問組件,即DAO組件 |
@Configuration | 用于定義配置類,可替換xml配置文件,也可以理解為Spring配置文件當中的上下文。 |
依附于@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上所有的注解信息,返回要導入的類名
@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
當通過“factoryBean”獲取實例時,F(xiàn)actoryBean會調(diào)用getObject()方法;
當通過“&factoryBean”獲取實例時,返回FactoryBean的實例;
當通過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的定義概念和使用的文章就介紹到這了,更多相關(guān)Spring Bean內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot的DeferredResult案例:DeferredResult的超時處理方式
這篇文章主要介紹了SpringBoot的DeferredResult案例:DeferredResult的超時處理方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01