Spring基礎(Bean)
Spring基礎(Bean)
Bean配置項(常用)
- Id
- Class
- Scope
- Constructor arguments
- Properties
- Autowiring mode
- lazy-initialization mode
- Initialization/destruction method
Bean的作用域
- singleton:單例,指一個Bean容器中只存在一份
- prototype: 每次請求(每次使用)建立新的例項,destroy方式不生效
- request:每次http請求建立一個例項且僅在當前request內有效
- session
- global session
- global session
例子(singleton與prototype)
Bean的生命週期
++Bean的定義——Bean的初始化——Bean的使用——Bean的銷燬++
- Bean的定義
Bean是spring裝配的元件模型,一切實體類都可以配置成一個Bean,進而就可以在任何其他的Bean中使用,一個Bean也可以不是指定的實體類,這就是抽象Bean。 - Bean的初始化
2.1 實現InitializingBean介面,覆蓋afterPropertiesSet()方法。
2.2 配置init-method - Bean的使用
3.1 BeanFactory
3.2 ApplicationContext - Bean的銷燬
4.1 實現DisposableBean介面,覆蓋destory()方法
4.2 配置destroy-method
配置全域性預設初始化、銷燬方法
default-init-method=“init” default-destroy-method=“destroy”
Aware
- Aware是什麼?
- Spring中提供了一些以Aware結尾的介面,實現了Aware介面的bean在被初始化之後,可以獲取相應資源
- 透過Aware介面,可以對Spring相應資源進行操作(一定要慎重)
- 為對Spring進行簡單的擴充套件提供了方便的入口
Bean的自動裝配(Autowiring)
default-autowire="byName">
<!-- default-autowire="constructor" -->
<!-- default-autowire="byType" -->
- No:不做任何操作
- Byname:根據屬性名自動裝配。此選項將檢查容器並根據名字查詢與屬性完全一致的bean,並將其與屬性自動裝配
- byType:如果容器中存在一個與指定屬性型別相同的bean,那麼將與該屬性自動裝配。
- Constructor:與byType方式類似,不同之處在於它應用於構造器引數。
Resources
- 針對於資原始檔的統一介面
- Resources
- UrlResource:URL對應的資源,根據一個URL地址即可構建
- ClassPathResource:獲取類路徑下的資原始檔
- FileSystemResource:獲取檔案系統裡面的資源
- ServletContextResource:ServletContext封裝的資源,用於訪問ServletContext環境下的資源
- InputStreamResource:針對於輸入流封裝的資源
- 針對於位元組陣列封裝的資源
ResourceLoader
Bean管理的註解
- 元註解
- 許多Spring提供的註解可以作為自己的程式碼,即“後設資料註解”,元註解是一個簡單的註解,可以應用到另一個註解
- 除了value(),元註解還可以有其它的屬性,允許定製 - 類的自動檢測及Bean的註冊
- Spring可以自動檢測類並註冊Bean到ApplicationContext中。 -
- 透過在基於XML的Spring配置如下標籤(請注意包含上下文名稱空間)
- 僅會查詢在同一個applicationContext中的bean註解 - 類的自動檢測及Bean的註冊
- 為了能夠檢測這些類並註冊相應的Bean,需要下面內容<context:component-scan base-package="org.example">
- 包含,通常在使用前者後,不用再使用後者
- AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor也會被包含進來 - 使用過濾器進行自定義掃描
- 預設情況下,類被自動發現並註冊bean的條件是:使用@Component,@Repository,@Service,@Controller註解或者使用@Component的自定義註解
- 可以透過過濾器修改上面的行為,如:下面例子的XML配置忽略所有的@Repository註解並用“Stub”代替
- 還可使用use-default-filters="false"禁用自動發現與註冊
- 定義Bean
- 掃描過程中元件被自動檢測,那麼Bean名稱是由BeanNameGenerator生成的(@Component,@Repository,@Service,@Controller都會有個name屬性用於顯示設定Bean Name)
- 可自定義bean命名策略,實現BeanNameGenerator介面,並一定要包含一個無引數建構函式。
- 作用域(Scope)
- 通常情況下自動查詢的Spring元件,其scope是singleton,Spring2.5提供了一個標識scope的註解@Scope
- 也可以自定義scope策略,實現ScopeMetadataResolver介面並提供一個無參構造器
- 代理方式
- 可以使用scoped-proxy屬性指定代理,有三個值可選:no,interfaces,targetClass
- @Required
- @Required註解適用於bean屬性的setter方法
- 這個註解僅僅表示,受影響的bean屬性必須在配置時被填充,透過在bean定義或透過自動裝配一個明確的屬性值
- @Autowired
- 可以將@Autowired註解為”傳統“的setter方法
- 可用於構造器或成員變數
- 預設情況下,如果因找不到合適的bean將會導致autowiring失敗丟擲異常,可以透過下面的方式避免
- 每個類只能有一個構造器被標記為required=true
- @Autowired的必要屬性,建議使用@Required註解
-可以使用@Autowired註解那些眾所周知的解析依賴性介面,比如:BeanFactory,ApplicationContext,Environment,ResourceLoader,ApplicationEventPublisher,and MessageSource
-可以透過新增註解給需要該型別的陣列的欄位或方法,以提供ApplicationContext中的所有特定型別的bean
-可以用於裝配key為String的Map
-如果希望陣列有序,可以讓bean實現org.springframework.core.Ordered介面或使用的@Order註解
-@Autowired是由Spring BeanPostProcessor處理的,所以不能在自己的BeanPostProcessor或BeanFactoryPostProcessor型別應用這些註解,這些型別必須透過XML或者Spring的@Bean註解載入
- @Qualifier
- 按型別自動裝配可能多個bean例項的情況,可以使用Spring的@Qualifier註解縮小範圍(或指定唯一),也可以用於指定單獨的構造器引數或方法引數
- 可用於註解集合型別變數
- @Resource(name="")
- 如果沒有顯示地指定@Resource的name,預設的名稱是從屬性名或者setter方法得出
- 註解提供的名字被解析為一個bean的名稱,這是由ApplicationContext的中的CommonAnnotationBeanPostProcessor發現並處理的
- 基於java的容器註解
- @Bean標識一個用於配置和初始化一個由SpringIoc容器管理的新物件的方法,類似於XML配置檔案的
- 可以在Spring的@Component註解的類中使用@Bean註解任何方法(僅僅是可以)
- 上一點中,通常使用的是@Configuration
@Configuration
public class AppConfig{
@Bean
public MyService myService(){
return new MyServiceImpl();
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1795/viewspace-2815609/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring基礎之 IOC九種bean宣告方式SpringBean
- Spring基礎使用(一)--------IOC、Bean的XML方式SpringBeanXML
- Spring 框架基礎(02):Bean的生命週期,作用域,裝配總結Spring框架Bean
- 0原始碼基礎學習Spring原始碼系列(一)——Bean注入流程原始碼SpringBean
- Spring基礎Spring
- [Spring]BeanSpringBean
- spring上 -基於Xml配置bean筆記SpringXMLBean筆記
- Spring中Bean及@Bean的理解SpringBean
- Spring Boot 基礎Spring Boot
- Spring 5基礎Spring
- Spring Cloud基礎SpringCloud
- Spring MVC基礎SpringMVC
- Spring Bean容器SpringBean
- 【Spring】Bean管理SpringBean
- Spring基礎筆記Spring筆記
- Spring基礎複習Spring
- Spring 5 基礎概念Spring
- Spring5基礎Spring
- Spring Cloud基礎教程SpringCloud
- spring原始碼基礎Spring原始碼
- Spring Bean 綜述SpringBean
- Spring bean 裝配SpringBean
- spring boot factory beanSpring BootBean
- Spring Bean作用域SpringBean
- Spring Bean 詳解SpringBean
- 淺談Spring BeanSpringBean
- Spring Bean裝配SpringBean
- Spring中的BeanSpringBean
- Spring – 裝配BeanSpringBean
- Spring裝配Bean(六)Bean的作用域SpringBean
- SpringBoot基礎篇Bean之動態註冊Spring BootBean
- ① EJB無狀態的bean(建立EJB的基礎教程)Bean
- Spring入門學習手冊 6:Spring MVC基礎中的基礎SpringMVC
- Spring Bean Scope 有狀態的Bean和無狀態的BeanSpringBean
- Spring AOP基礎簡介Spring
- Spring Boot 學習-基礎Spring Boot
- Spring Boot In Practice (0):基礎Spring Boot
- 面試類 - Spring基礎(三)面試Spring