如何清楚描述spring


總的來說spring是一個容器,核心就是個bean ,通過spring容器來對對象的管理,通過配置文件來實現spring對對象的管理。
1.IOC和AOP
IOC:控制反轉。控制權由對象本身交給了spring容器,比如我們在java代碼中,每次調用其他類的非靜態方法時,都要new一個,某個java類可能要引用好多其他類,就new好多次,這樣耦合度很高,現在我通過spring容器來管理對對象的生成,當用戶需要哪個bean的時候,直接注入就行,降低耦合度,
AOP:面向切面編程,使用代理模式增強處理的對象。比如,日誌文件,一個系統裏面好多都要用到日誌,如果每個類都寫處理日誌文件的類,會增加代碼的冗餘度,然後我們重新寫一個代理,這個類就是個代理類。使用代理模式,然後在配置文件中配置掃描那些需要增強的類,之後就不會在每個類中都寫處理日誌的代碼。減少代碼冗餘度。

當我們在一個切面類裏使用@Before來標註一個方法時,該方法將作爲Before增強處理,使用@Before標註時通常要指定一個value屬性值,用來指定一個切入點表達式(既可以是一個已有的切入點,也可以直接定義切入點表達式),用於指定該增強處理將被織入那些切入點。 

   
注意:("execution(* cn.huaxia.spring.*.*(..))")第一個星號後面一定要有一個空格。
//定義一個切面
@Aspect
publicclass BeforeAdviceTest {
    // 執行cn.huaxia.spring包下的所有方法都做爲切入點
    @Before("execution(* cn.huaxia.spring.*.*(..))")
    publicvoid authority() {
    System.out.println("模擬執行權限檢查...");
    }
}    
上面@Aspect@標註BeforeAdviceTest 表明該類是一個切面類,在該切面裏定義了一個authority()方法,這個方法本來沒有什麼特別之處,但是因爲使用@Before來標註該方法,這就將該方法轉換成一個增強處理。上面程序中使用@Before Annotation標註時,直接指定切入點表達式,指定cn.huaxia.spring下的所有方法都作爲切入點。
 
@Component
publicclass Chineseimplements Person {
    @Override
    public String sayHello(String word) {
        return word;
    }
    publicvoid eat(String food) {
        System.out.println("我正在吃" + food);
    }
}

@Aspect
publicclass AfterReturningAdviceTest {
    @AfterReturning(pointcut="execution(* cn.huaxia.spring.*.*(..))",returning="obj")
    publicvoid log(Object obj){
        System.out.println("獲取目標方法返回值"+obj);
        System.out.println("模擬日誌記錄功能....");
    }
}

從上面Chinese類的代碼來看,他是一個如此純淨的Java類,他絲毫不知將被誰來進行增強處理,也不知道將被怎樣增強處理---正式這種無知纔是"AOP"最大的魅力:目標類可以被無限增強。

<!-- 指定自定搜索Bean組件、自動搜索切面類-->
<context:component-scanbase-package="cn.huaxia.spring">
<context:include-filtertype="annotation"
expression="org.aspectj.lang.annotation.Aspect"/>
</context:component-scan>
<!-- 啓動AspectJ支持-->
<aop:aspectj-autoproxy/>
</beans>

2 兩種注入方式:setter注入。構造器注入。

3.事物管理

事務就是對一系列的數據庫操作(比如插入多條數據)進行統一的提交或回滾操作,如果插入成功,那麼一起成功,如果中間有一條出現異常,那麼回滾之前的所有操作。這樣可以防止出現髒數據,防止數據庫數據出現問題。

開發中爲了避免這種情況一般都會進行事務管理。Spring中也有自己的事務管理機制,一般是使用TransactionMananger進行管理,可以通過Spring的注入來完成此功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章