您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在不使用spring框架中使用aop的功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Spring框架的AOP機制可以讓開發者把業務流程中的通用功能抽取出來,單獨編寫功能代碼。在業務流程執行過程中,Spring框架會根據業務流程要求,自動把獨立編寫的功能代碼切入到流程的合適位置。
這里需要注意的是Spring AOP目前僅僅支持方法級別的切面,成員的interception并沒有實現。另外,spring aop僅僅是集成框架,并沒有參與aop的具體開發。
如果想利用aop的更多功能,或者在不使用spring的框架中使用aop的功能,該怎么辦呢?
spring aop集成了AspectJ(可以和java編程語言無縫結合的一個面向切面編程的可擴展框架)
Eclipse Marketplace安裝插件AJDT
創建Aspect工程
創建AspectJ測試類
創建一個切面Aspect文件
.aj文件
運行HelloAspectJDemo的java程序,結果為:
public class TimeBook {undefined private Logger logger = Logger.getLogger(this.getClass().getName()); //審核數據的相關程序 public void doAuditing(String name){undefined logger.log(Level.INFO, name + "開始審核數據..."); System.out.println("審核程序"); logger.log(Level.INFO, name + "審核數據結束..."); } } //TestHelloWorld.java package com.gc.test; import com.gc.action.TimeBook; public class TestHelloWorld {undefined public static void main(String[] args){undefined TimeBook timeBook = new TimeBook(); timeBook.doAuditing("張三"); } }
public class TimeBook implements TimeBookInterface {undefined //審核數據的相關程序 public void doAuditing(String name){undefined System.out.println("審核程序"); } } //TimeBookProxy.java package com.gc.action; import org.apache.log4j.Level; import org.apache.log4j.Logger; import com.gc.impl.TimeBookInterface; public class TimeBookProxy {undefined private Logger logger = Logger.getLogger(this.getClass().getName()); private TimeBookInterface timeBookInterface; //在該類中針對前面的接口TimeBookInterface編程,而不是針對具體的類 public TimeBookProxy(TimeBookInterface timeBookInterface){undefined this.timeBookInterface = timeBookInterface; } //實際業務處理 public void doAuditing(String name){undefined logger.log(Level.INFO,"開始審核數據 "+name); timeBookInterface.doAuditing(name); logger.log(Level.INFO,"審核數據結束 "+name); } } public class TestHelloWorld {undefined public static void main(String[] args){undefined TimeBookProxy timeBookProxy = new TimeBookProxy(new TimeBook()); timeBookProxy.doAuditing("張三"); } }
public class LogProxy implements InvocationHandler{undefined private Logger logger = Logger.getLogger(this.getClass().getName()); private Object delegate; //綁定代理對象 public Object bind(Object delegate){undefined this.delegate = delegate; return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(),this); } //針對接口編程 public Object invoke(Object proxy,Method method,Object[] args) throws Throwable {undefined Object result = null; try{undefined //在方法調用前后進行日志輸出 logger.log(Level.INFO,args[0]+" 開始審核數據..."); result = method.invoke(delegate, args); logger.log(Level.INFO,args[0]+" 審核數據結束..."); }catch(Exception e){undefined logger.log(Level.INFO,e.toString()); } return result; } } //TimeBookInterface.java package com.gc.impl; //針對接口編程 public interface TimeBookInterface {undefined public void doAuditing(String name); } //TimeBook.java public class TimeBook implements TimeBookInterface {undefined //審核數據的相關程序 public void doAuditing(String name){undefined System.out.println("審核程序"); } } //TestHelloWorld.java public class TestHelloWorld {undefined public static void main(String[] args){undefined //實現了對日志類的重用 LogProxy logProxy = new LogProxy(); TimeBookInterface timeBookProxy = (TimeBookInterface)logProxy.bind(new TimeBook()); timeBookProxy.doAuditing("張三"); } }
上述內容就是怎么在不使用spring框架中使用aop的功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。