javascript
Spring框架—SpringBean配置
目錄
一、配置
1、基于XML的配置
2、基于注解的配置
3、基于Java類的配置
二、解析
1、基于XML配置的解析
2、基于注解配置的解析
三、注冊
一、配置
1、基于XML的配置
適用場景:Bean實現類來自第三方類庫,如:DataSource等
<beans><import resource=“resource1.xml” />//導入其他配置文件Bean的定義<import resource=“resource2.xml” /><bean id="userService" class="cn.lovepi.***.UserService" init-method="init" destory-method="destory"> </bean><bean id="message" class="java.lang.String"><constructor-arg index="0" value="test"></constructor-arg></bean></beans>2、基于注解的配置
適用場景:項目中自己開發使用的類,如controller、service、dao等
步驟如下:
1)在applicationContext.xml配置掃描包路徑
<context:component-scan base-package="com.lovepi.spring">//包含的目標類<context:include-filter type="regex" expression="com.lovepi.spring.*"/>//排除的目標類 <context:exclude-filter type="aspectj" expression="cn.lovepi..*Controller+"/> </context:component-scan>2)使用注解聲明bean
Spring提供了四個注解,這些注解的作用與上面的XML定義bean效果一致,在于將組件交給Spring容器管理。組件的名稱默認是類名(首字母變小寫),可以自己修改:
- @Component:當對組件的層次難以定位的時候使用這個注解
- @Controller:表示控制層的組件
- @Service:表示業務邏輯層的組件
- @Repository:表示數據訪問層的組件
3、基于Java類的配置
適用場景:需要通過代碼控制對象創建邏輯的場景,好處是實現零配置,消除xml配置文件
步驟如下:
二、解析
1、基于XML配置的解析
- BeanDefinitionReader:Bean 相關信息配置完成之后,需要解析資源,BeanDefinitionReader 接口定義了一系列方法來解析和輔助解析資源,XmlBeanDefinitionReader 和 PropertiesBeanDefinitionReader 都是 BeanDefinitionReader 的實現類,用來解析特定資源的。
- BeanDefinitionParser:XML 解析器
2、基于注解配置的解析
- AnnotatedBeanDefinitionReader
AnnotatedBeanDefinitionReader 與 XmlBeanDefinitionReader 和 PropertiesBeanDefinitionReader 不同,它沒有實現 BeanDefinitionReader 接口,并且 AnnotatedBeanDefinitionReader 這個類注冊和解析在同一類中。這里需要注意一下,雖然這個類可以解析配置類,但是在這個階段并不能解析 @Bean 等配置 Bean 的注解,@Bean 等配置類的注解是在 AbstractApplication 中 refresh 方法中處理的。也就是說 AnnotaedBeanDefinitionReader 是發現 Configclass 的,而 @Bean 注解是在 解析Configclass 內部進行處理的。
public class AnnotationBeanDefinitionParserDemo {public static void main(String[] args) {// 創建一個 Bean 工廠DefaultListableBeanFactory defaultListableBeanFactory = new DefaultListableBeanFactory();// 創建一個 AnnotatedBeanDefinitionReaderAnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new AnnotatedBeanDefinitionReader(defaultListableBeanFactory);// 添加一個注冊類annotatedBeanDefinitionReader.register(AnnotationBeanDefinitionParserDemo.class);// 通過依賴查找獲取 Bean 實例AnnotationBeanDefinitionParserDemo bean = defaultListableBeanFactory.getBean(AnnotationBeanDefinitionParserDemo.class);System.out.println("通過 AnnotatedBeanDefinitionReader 元信息配置方式獲取 bean 實例:" + bean);} }三、注冊
spring在啟動時會自己把bean(java組件)注冊到ioc容器里,實現控制反轉,在開發人員使用spring開發應用程序時,你是看不到new關鍵字的,所有對象都應該從容器里獲得,它們的生命周期在放入容器時已經確定!最原始的創建對象的方法就是通過new來實現(手動的編寫代碼實現):而Spring提供了Ioc容器用于對象的創建以及配置、管理、銷毀等。
package com.rumenz;public class DemoApplication {public static void main(String[] args) {AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();registerBean(ac,"rumenz");//啟動Spring上下文ac.refresh();//依賴查找Rumenz rumenz = (Rumenz) ac.getBean("rumenz");rumenz.print();//關閉Spring上下文ac.close();}private static void registerBean(BeanDefinitionRegistry reg, String beanName){BeanDefinitionBuilder bd=BeanDefinitionBuilder.genericBeanDefinition(Rumenz.class);reg.registerBeanDefinition(beanName,bd.getBeanDefinition());}}?
總結
以上是生活随笔為你收集整理的Spring框架—SpringBean配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring框架—IoC容器
- 下一篇: Spring框架—SpringBean加