本文目錄一覽:
- 1、java切點和切面講解,主要是幹什麼的,有什麼作用,省代碼?高效?務必通俗易懂,跪謝
- 2、java面向對象的三要素是什麼
- 3、Java配置切面的幾種方式你都知道嗎
- 4、誰能解釋一下java面向切面編程的思想 以及具體的使用方式
java切點和切面講解,主要是幹什麼的,有什麼作用,省代碼?高效?務必通俗易懂,跪謝
切點和通知構成切面;比如現在你想在所有的save方法前加一些相同代碼,那你的切點就是save前,然後通知就是你所加的代碼,而這兩個整體構成一個切面,當你那天突然覺得這段代碼需要改一下,那你就可以直接改通知內容,結果是開發效率變高,代碼量減少,耦合度降低,你可以參考聲明式事務的配置方式來梳理這部分知識,會快一點
java面向對象的三要素是什麼
java中的面向對象的三大基本特徵,不是三要素:【封裝】、【繼承】、【多態】
一、封裝
對象要有一個明確的邊界;邊界的劃分(對象各司其職、對象的粒度、對象的可重用性)
具體來說:
1.屬性: 私有 private(提供set和get方法)
2.方法: 公開或私有public/private
3.方法聲明 — 公開
方法實現 — 隱藏
實現改變時,對對象的使用者沒有影響。
二、繼承
共性放到父類,特性放到子類;子類,父類 — 其實就是特殊 — 一般
1.關鍵字: extends 例如:Dog extends Animal{}
2.java中一個類最多只能有一個直接的父類,即單繼承(具有簡單性、樹形結構),
C++中是單繼承
java中要實現多繼承,通過接口來實現。
3.父類中所有屬性和方法都能繼承給子類;父類中的私有方法不能繼承給子類。
4.java中的訪問修飾符
訪問修飾符
訪問權限
繼承
private 本類內部 不能繼承
default 本類+同包 同包子類可以繼承
protected 本類+同包+不同子包 可以繼承
public 公開 可以繼承
5.構造對象過程
(1)分配空間
(2)遞歸地構造父類對象
a. 父類 初始化屬性
b. 父類 構造方法
(3)初始化屬性
(4)調用構造方法
6.super
用法:
super() 調用父類的構造方法,只能出現在構造方法的第一行
super.方法名 super表示父類的對象,通過它去調用父類的方法
注意:在寫類的時候,一定要寫默認無參的構造方法,如果一個構造方法的
第一句既不是this(),也不是super()時,那麼就會在這裡隱含的調用
他的父類的無參的構造方法,即隱含的有super()。
三、多態
運行時多態。
子類的對象放在父類的引用中,例如 Animal a=new Dog,子類對象當父類對象來使用。
1.多態原則:
(1)對象類型不變
(2)只能用引用調用其引用類型中定義的方法
(3)運行時,根據對象的實際類型去找子類覆蓋之後的方法
例子:
有Animal類中有eat()和sleep()兩個方法,sleep()中睡8小時;子類Dog中有
eat()方法,sleep()方法中睡6小時,還有wangwang()方法。
現創建Animal a=new Dog(); 不能調用a.wangwang(),調用a.sleep()輸出睡6小時。
2.對象的強制轉換
格式: 引用 instanceof 類型
引用所指的對象是否與類相符,返回值boolean值。
用法:
Animal a=new Cat();
if(a instanceof Dog)
{
Dog d=(Dog)a;
d.wangwang();
}
說明:如果只有Dog d=(Dog)a;運行時錯誤,因為a是Cat而不是Dog (多態原則第一條)
3.多態的靈活變換
(1)用於參數列表上:
public void m(A a){} 可以用A類的任何子類對象作為參數
(2)用在返回值上:
public A m(){} 這個方法可能返回A類的任何子類對象
Java配置切面的幾種方式你都知道嗎
演示5種方式配置文件AOP
1. bean class=”cn.hncu.spring4x.aop.Cat” id=”cat”/bean
!– 切點 —
bean class=”org.springframework.aop.support.JdkRegexpMethodPointcut” id=”pointcut”
property name=”pattern” value=”.*run.*”/property
/bean
!– 通知 ,要自己寫–
bean class=”cn.hncu.spring4x.aop.AroundAdvice” id=”advice”/bean
!– 切面=切點+通知 —
bean class=”org.springframework.aop.support.DefaultPointcutAdvisor” id=”advisor”
property name=”advice” ref=”advice”/property
property name=”pointcut” ref=”pointcut”/property
/bean
bean class=”org.springframework.aop.framework.ProxyFactoryBean” id=”catProxide”
property name=”target” ref=”cat”/property
property name=”interceptorNames”
list
valueadvisor/value
/list
/property
/bean
2. bean class=”cn.hncu.spring4x.aop.Cat” id=”cat”/bean
!– 切面=切點+通知 (把切點和通知寫成內部bean)–
bean class=”org.springframework.aop.support.DefaultPointcutAdvisor” id=”advisor”
property name=”advice”
bean class=”cn.hncu.spring4x.aop.AroundAdvice”/bean
/property
property name=”pointcut”
bean class=”org.springframework.aop.support.JdkRegexpMethodPointcut”
property name=”patterns”
list
value.*run.*/value
value.*say.*/value
/list
/property
/bean
/property
/bean
bean class=”org.springframework.aop.framework.ProxyFactoryBean” id=”catProxide”
property name=”target” ref=”cat”/property
property name=”interceptorNames”
list
valueadvisor/value
/list
/property
/bean
3.bean class=”cn.hncu.spring4x.aop.Cat” id=”cat”/bean
!–//直接在切面bean中配置“切點的正則表達式”,省去“切點bean”的配置 用到這個類 org.springframework.aop.support.RegexpMethodPointcutAdvisor —
bean class=”org.springframework.aop.support.RegexpMethodPointcutAdvisor” id=”advisor”
property name=”advice”
bean class=”cn.hncu.spring4x.aop.AroundAdvice”/bean
/property
property name=”patterns”
list
value.*run.*/value
/list
/property
/bean
bean class=”org.springframework.aop.framework.ProxyFactoryBean” id=”catProxide”
property name=”target” ref=”cat”/property
property name=”interceptorNames”
list
valueadvisor/value
/list
/property
/bean
4. bean class=”cn.hncu.spring4x.aop.Cat” id=”cat”/bean
!–//直接在切面bean中配置“切點的正則表達式”,省去“切點bean”的配置 用到這個類 org.springframework.aop.support.RegexpMethodPointcutAdvisor —
bean class=”org.springframework.aop.support.RegexpMethodPointcutAdvisor” id=”advisor”
property name=”advice”
bean class=”cn.hncu.spring4x.aop.AroundAdvice”/bean
/property
property name=”patterns”
list
value.*run.*/value
/list
/property
/bean
!– 自動代理 —
bean class=”org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator”/bean
5. bean class=”cn.hncu.spring4x.aop.Cat” id=”cat”/bean
!–//直接在切面bean中配置“切點的正則表達式”,省去“切點bean”的配置 用到這個類 org.springframework.aop.support.RegexpMethodPointcutAdvisor —
bean class=”org.springframework.aop.support.RegexpMethodPointcutAdvisor” id=”advisor”
property name=”advice”
bean class=”cn.hncu.spring4x.aop.AroundAdvice”/bean
/property
property name=”patterns”
list
value.*run.*/value
/list
/property
/bean
!– 自動代理 —
bean class=”cn.hncu.spring4x.aop.MyAutoProxy”/bean
誰能解釋一下java面向切面編程的思想 以及具體的使用方式
面向切面編程(AOP),就是關注程序運行的過程,切面就是要把方法切開,分別執行前,執行中,執行後(可能更細化)等多個步驟,分別針對這三個階段進行處理。以獲得邏輯過程中各部分之間低耦合性的隔離效果。
具體使用場景:
事務管理:我們在操作數據庫的時候需要在操作前打開事務,結束後提交事務(或回滾事務),按往常的編碼方式,我們會在每個方法前、後都添加一些事務操作的重複的代碼,使得每個類都與事務操作相耦合;而使用了AOP,代碼上看上去就是直接操作的數據庫,而我們通過某種機制,可讓代碼在你不察覺的情況下進行了事務開啟和提交(或回滾),事實上Spring就提供了這種事務機制。
差不多的場景還有日誌的記錄
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312508.html