導航:首頁 > 方法技巧 > 如何找到aop目標方法的參數

如何找到aop目標方法的參數

發布時間:2022-09-06 07:40:50

1. 怎樣獲取spring Aop 中攔截到的參數

這個得用註解吧,我也沒試過。不過註解應該能解決問題,類似於spring mvc中的用法。

2. spring的aop在方法執行後怎麼得到該方法的參數

afterReturning重寫方法裡面就把方法的參數,當作形參傳遞給arg2了

public class After implements AfterReturningAdvice{
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {

}

}

3. AOP時,如何獲取目標方法上的註解

private void beforeTransationHandle(JoinPoint point) throws Exception{
//攔截的實體類
Object target = point.getTarget();
//攔截的方法名稱
String methodName = point.getSignature().getName();
//攔截的方法參數
Object[] args = point.getArgs();
//攔截的放參數類型
Class[] parameterTypes = ((MethodSignature)point.getSignature()).getMethod().getParameterTypes();

Method m = null;
try {
//通過反射獲得攔截的method
m = target.getClass().getMethod(methodName, parameterTypes);
//如果是橋則要獲得實際攔截的method
if(m.isBridge()){
for(int i = 0; i < args.length; i++){
//獲得泛型類型
Class genClazz = GenericsUtils.getSuperClassGenricType(target.getClass());
//根據實際參數類型替換parameterType中的類型
if(args[i].getClass().isAssignableFrom(genClazz)){
parameterTypes[i] = genClazz;
}
}
//獲得parameterType參數類型的方法
m = target.getClass().getMethod(methodName, parameterTypes);
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}

4. spring的aop怎麼獲取切點參數

比較簡單的方式可以用JoinPoint舉個列子。
package com.jf.my.Demo.AOP;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class TestAOPDemoTwo {
@Pointcut("execution(* *.run*(..)) ")
public void any() {
}
@Before(value = "any()")
public void before(JoinPoint join) {
System.out.println("Method 2 before===========");
}
@After(value = "any()")
public void after(JoinPoint join) {
System.out.println("Method 2 after============");
}
@AfterReturning(value = "any()",returning="ji")
public void around(String ji) {// ProceedingJoinPoint pjp
System.out.println("ji");
System.out.println("retrun"+ji);
}
}
直接在方法里寫joinpoint,spring會自己注入的,你可以去查查joinpoint的用法之類的東西,然後用下就好了。https://my.oschina.net/itblog/blog/211693這裡面介紹的挺不錯的

5. 什麼是aop

AOP為Aspect Oriented Programming的縮寫,是面向切面編程,通過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。AOP是OOP的延續,是軟體開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。

AOP的出現彌補了OOP的這點不足,AOP 是一個概念,一個規范,本身並沒有設定具體語言的實現,AOP是基於動態代理模式。AOP是方法級別的,要測試的方法不能為static修飾,因為介面中不能存在靜態方法,編譯就會報錯。

AOP可以分離業務代碼和關注點代碼(重復代碼),在執行業務代碼時,動態的注入關注點代碼。切面就是關注點代碼形成的類。Spring AOP中的動態代理主要有兩種方式,JDK動態代理和CGLIB動態代理。JDK動態代理通過反射來接收被代理的類,並且要求被代理的類必須實現一個介面。

(5)如何找到aop目標方法的參數擴展閱讀

AOP實現的關鍵在於AOP框架自動創建的AOP代理,AOP代理主要分為靜態代理和動態代理,靜態代理的代表為AspectJ。而動態代理則以Spring AOP為代表,靜態代理是編譯期實現,動態代理是運行期實現,可想而知前者擁有更好的性能。

靜態代理是編譯階段生成AOP代理類,也就是說生成的位元組碼就織入了增強後的AOP對象;動態代理則不會修改位元組碼,而是在內存中臨時生成一個AOP對象,這個AOP對象包含了目標對象的全部方法,並且在特定的切點做了增強處理,並回調原對象的方法。

6. aop怎麼獲取springmvc controller中的requestmapping

@RequestMapping(value = "/login", method = RequestMethod.GET)
public ModelAndView myMethod(HttpServletRequest request,
HttpServletResponse response,
//@RequestParam("username")String username, @RequestParam("password")String password
String username,String password,//如果和前台的一樣一樣簡寫成這樣
ModelMap modelMap) throws Exception {
username = new String(username.getBytes("iso8859-1"),"UTF-8");//編碼問題 (伺服器一幫都是iso的)
System.out.println(username+":"+password);
modelMap.put("loginUser", username);
modelMap.put("msg", "I'm in session");
return new ModelAndView("/view/hello", modelMap);
}

這里是一個方法,springMVC中參數可以直接現在方法的參數列表中,如果是對象屬性的話也可以直接使用對象例如(User user,...)

剛才的方法對應的前台:
<form action="login">
username:
<input name="username" />
<br>
password:
<input name="password" type="password" />
<br>
<input type="submit" value="登入" />
</form>
追問
我的form表單中有10多個欄位 而且和資料庫都是一一對應的,而且以後說不定還會增加,不想一個欄位一個欄位的傳,想直接將整個form表單的所有欄位全傳過去 該怎麼寫啊

回答
這些數據都是一個類裡面的吧。就只要吧原來的string username,string password ...
改成哪個類就行了,會自動封裝進去的例如:方法的參數User user,HttpRequest requrst,..
使用的時候只要user.getUsername();
類似下面的:

@RequestMapping("/addUser")
public String addUser(User user,HttpServletRequest request){

userManager.addUser(user);

return "redirect:/user/getAllUser";
}

7. Spring aop 註解方式怎麼獲得執行了目標的某個方法

private void beforeTransationHandle(JoinPoint point) throws Exception{
//攔截的實體類
Object target = point.getTarget();
//攔截的方法名稱
String methodName = point.getSignature().getName();
//攔截的方法參數
Object[] args = point.getArgs();
//攔截的放參數類型
Class[] parameterTypes = ((MethodSignature)point.getSignature()).getMethod().getParameterTypes();

Method m = null;
try {
//通過反射獲得攔截的method
m = target.getClass().getMethod(methodName, parameterTypes);
//如果是橋則要獲得實際攔截的method
if(m.isBridge()){
for(int i = 0; i < args.length; i++){
//獲得泛型類型
Class genClazz = GenericsUtils.getSuperClassGenricType(target.getClass());
//根據實際參數類型替換parameterType中的類型
if(args[i].getClass().isAssignableFrom(genClazz)){
parameterTypes[i] = genClazz;
}
}
//獲得parameterType參數類型的方法
m = target.getClass().getMethod(methodName, parameterTypes);
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}

8. spring 中的aopbefore執行的方法的參數是基本的數據類型該怎麼定義

@Component
public class TestInterceptor {
@Pointcut("execution (* com.test.facade.*.*(..))")
public void testPointcut(){}

@Around("testPointcut()")
public Object testHandleBody(ProceedingJoinPoint pjp) throws Throwable{

Object retVal = null; //連接點方法返回值

//獲取將要執行的方法名稱
String methodName = pjp.getSignature().getName();

//獲取執行方法的參數
Object[] args = pjp.getArgs();

9. spring aop後置通知怎麼獲取目標方法返回值,及通知的信息

訪問目標方法最簡單的做法是定義增強處理方法時,將第一個參數定義為JoinPoint類型,當該增強處理方法被調用時,該JoinPoint參數就代表了織入增強處理的連接點。JoinPoint里包含了如下幾個常用的方法:Object[]getArgs:返回目標方法的參數SignaturegetSignature:返回目標方法的簽名ObjectgetTarget:返回被織入增強處理的目標對象ObjectgetThis:返回AOP框架為目標對象生成的代理對象注意:當使用@Around處理時,我們需要將第一個參數定義為ProceedingJoinPoint類型,該類是JoinPoint的子類。

閱讀全文

與如何找到aop目標方法的參數相關的資料

熱點內容
偏癱的穩定訓練方法 瀏覽:817
架點分析與使用方法 瀏覽:608
菜鳥寫作技巧和方法 瀏覽:762
閑置快速賣出去的方法 瀏覽:549
電腦用電壓力鍋做蛋糕的方法 瀏覽:5
建行隨芯用使用方法 瀏覽:282
眼角的皺紋用什麼方法可以弄掉 瀏覽:930
汽車螺紋測量方法 瀏覽:396
分析企業財務數據的方法 瀏覽:844
解決好三農問題的方法 瀏覽:775
小彈力帶的腿部訓練方法 瀏覽:872
eminence使用方法 瀏覽:185
統計方法與資料分析課 瀏覽:419
如何擠奶方法視頻教程 瀏覽:81
榮耀6電量提醒設置在哪裡設置方法 瀏覽:111
黃褐斑國外治療方法 瀏覽:618
煎包機的製作方法視頻 瀏覽:840
電腦怎麼清理桌面垃圾最快方法 瀏覽:608
轎車輪胎性能檢測方法及其標准 瀏覽:439
pc肌鍛煉方法教學視頻 瀏覽:999