1. 程式人生 > 實用技巧 >12C開始oracle實現了SCALABLE LGWR多程序並行寫redo log

12C開始oracle實現了SCALABLE LGWR多程序並行寫redo log

傳統的面向物件程式設計弊端:

同樣的add()方法中,可能含有相同的程式碼,可以抽取出來。變成x()方法 但是一旦x()方法改名,或者邏輯變了需要定義在add之前。。。。後果不堪設想 AOP面向切面程式設計很好的解決了這一弊端

前置通知:在特定的方法之前通知。 異常通知:在方法發生異常通知 環繞通知:前後都可以通知 通知的實現步驟:
  1. 匯入jar包
    1. aopaliance.jar
    2. aspectjweaver.jar
  2. 配置:
<!--切入點所在的類-->
<bean id="StudentService" class="com.serviceimpl.StudentServiceImpl">
    <property name="studnetdao" ref="studentdao"></property>
</bean>
可以寫前置通知,後置通知。。。。。。。
<!--    前置通知類-->
    <!--    ===============連線線的一端================-->
    <bean id="logbefore" class="com.normal.logBefore"></bean>

<!--    將切入點和通知進行關聯-->
    <aop:config>
        <!-- 配置切入點(在哪裡進行通知)-->
        <!--    ===============連線線的另一端================-->
        <aop:pointcut id="point" expression=" execution(public void com.service.StudentService.delStudentById(int)) or execution(public void com.service.StudentService.addStudent(com.entity.Student))"/>
        <!--advisor相當於連結切入點和切面的線-->
        <!--==========連線線=====-->
        <aop:advisor advice-ref="logbefore" pointcut-ref="point"></aop:advisor>
    </aop:config>
<aop:pointcut id="point" expression=" execution()"/>
execution()中填寫的 切入點的方法宣告,當一個切入面有多個切入點時:多個方法宣告中 用”or“相連。並且,切入點的方法只需要寫明型別即可,不需要寫變數。

前置通知的具體實現

public class logBefore implements MethodBeforeAdvice {
    @Override
    public void before(Method method, Object[] objects, Object o) throws Throwable {
        System.out.println(
"前置通知!!!"); } }

上述說的是約定條件

異常通知: 實現了異常介面,雖然裡面沒有抽象方法,但是需要編寫編寫一下方法:
  1. public void afterThrowing(Method method,Object[] args,Object target,ThrowableSubclass o)
  2. public void afterThrowing(ThrowableSubclass o)
編寫上述其中之一的方法就行, 引數列表分別是:
  1. 切入點
  2. 切入點的引數列表
  3. 呼叫切入點的物件
  4. 丟擲的異常類