12C開始oracle實現了SCALABLE LGWR多程序並行寫redo log
阿新 • • 發佈:2020-12-29
傳統的面向物件程式設計弊端:
同樣的add()方法中,可能含有相同的程式碼,可以抽取出來。變成x()方法
但是一旦x()方法改名,或者邏輯變了需要定義在add之前。。。。後果不堪設想
AOP面向切面程式設計很好的解決了這一弊端
前置通知:在特定的方法之前通知。
異常通知:在方法發生異常通知
環繞通知:前後都可以通知
通知的實現步驟:
- 匯入jar包
- aopaliance.jar
- aspectjweaver.jar
- 配置:
<!--切入點所在的類--> <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( "前置通知!!!");
}
}
上述說的是約定條件
異常通知: 實現了異常介面,雖然裡面沒有抽象方法,但是需要編寫編寫一下方法:- public void afterThrowing(Method method,Object[] args,Object target,ThrowableSubclass o)
- public void afterThrowing(ThrowableSubclass o)
- 切入點
- 切入點的引數列表
- 呼叫切入點的物件
- 丟擲的異常類