spring-AOP前言
生活随笔
收集整理的這篇文章主要介紹了
spring-AOP前言
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AOP概念
AOP:Aspect Oriented Programming的縮寫,意為:面向切面編程。
通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是OOP的延續(xù),是軟件開發(fā)中的一個熱點(diǎn),也是Spring框架中的一個重要內(nèi)容,是函數(shù)式編程的一種衍生范型。利用AOP可以對業(yè)務(wù)邏輯的各個部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率。
AOP采用一種稱為“橫切”的技術(shù),將涉及多業(yè)務(wù)流程的通用功能抽取并單獨(dú)封裝,形成獨(dú)立的切面,在合適的時機(jī)將這些切面橫向切入到業(yè)務(wù)流程指定的位置中。
整體流程:
1.接口 2.實(shí)現(xiàn)類 3.原始測試 4.增加兩個方法 5.測試兩個方法 6.抽取兩個方法封裝成一個類 7.創(chuàng)建代理對象 8.代理類中增加功能
java項目
UserService
package com.henu.service; ? /*** 實(shí)現(xiàn)類*/ public class UserServiceImpl implements UserService { ?@Overridepublic void addUser() {//核心方法System.out.println("jdk add user");} }UserServiceImpl
package com.henu.service; ? /*** 實(shí)現(xiàn)類*/ public class UserServiceImpl implements UserService { ?@Overridepublic void addUser() {//核心方法System.out.println("jdk add user");} }Aspect
package com.henu.service;/** ? /*** 封裝了橫切關(guān)注點(diǎn)方法*/ public class Aspect {//切面類 ?public void validate() {//橫切關(guān)注點(diǎn)System.out.println("權(quán)限驗(yàn)證......");} ?public void log() {//橫切關(guān)注點(diǎn)System.out.println("記錄日志......");} }MyFactory
package com.henu.service; ? import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; ? public class MyFactory { ?/*** 工廠生產(chǎn)代理類,目的:將目標(biāo)類(切入點(diǎn))和切面類(通知) 結(jié)合。* @return*/public static UserService createService() {//1 創(chuàng)建目標(biāo)類對象final UserService userService = new UserServiceImpl();//2 創(chuàng)建類對象final Aspect myAspect = new Aspect();//3 使用jdk 動態(tài)代理生產(chǎn)代理類UserService proxyService = (UserService)Proxy.newProxyInstance(MyFactory.class.getClassLoader(),userService.getClass().getInterfaces(),new InvocationHandler(){// 代理對象每一個方法執(zhí)行時,都將調(diào)用處理類的invoke方法@Overridepublic Object invoke(Object proxy,Method method, Object[] args)throws Throwable {// 執(zhí)行前通知myAspect.validate();//執(zhí)行目標(biāo)類的相應(yīng)方法Object obj = method.invoke(userService, args);//業(yè)務(wù)執(zhí)行位置// 執(zhí)行后通知myAspect.log(); ?return obj; ?//返回方法返回值}});return proxyService; //返回代理類} ? }測試 TestApp
import com.henu.service.MyFactory; import com.henu.service.UserService; ? public class TestApp {public static void main(String[] args) {UserService service = MyFactory.createService();service.addUser();} }測試結(jié)果
權(quán)限驗(yàn)證...... jdk add user 記錄日志......總結(jié)
以上是生活随笔為你收集整理的spring-AOP前言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybatis实现反向工程
- 下一篇: idea补全代码快捷键