Aspectj لا يصاب جميع الأحداث في الربيع الإطار ؟

StackOverflow https://stackoverflow.com/questions/39639

  •  09-06-2019
  •  | 
  •  

سؤال

مشروعي هو بناء على الربيع إطار 2.5.4.وأنا في محاولة لإضافة جوانب لبعض وحدات تحكم (يمكنني استخدام aspectj 1.5.3).

لقد تمكين السيارات الوكيل في application-servlet.xml فقط لصق هذه الخطوط إلى نهاية ملف xml:

<aop:aspectj-autoproxy />
<bean id="auditLogProcessor" class="com.example.bg.web.utils.AuditLogProcessor" />

إنشاء الجانب:

package com.example.bg.web.utils;

import org.apache.log4j.Logger;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class AuditLogProcessor
{
    private final static Logger log = Logger.getLogger(AuditLogProcessor.class);

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterHandleRequest() {
        log.info("test111");
    }

    @After("execution(* com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail(..))")
    public void afterRebuildThumbnail() {
        log.info("test222");
    }
}

وحدات تحكم بلدي:

class AssetAddController implements Controller
class AssetThumbnailRebuildController extends MultiActionController

عندما مجموعة الفرامل نقاط في جانب المستشارين استدعاء وحدات تحكم أمسكت فقط afterHandleRequest() ولكن ليس afterRebildThumbnail() ما الذي فعلته خطأ ؟

ملاحظة

أنا أسأل هذا السؤال نيابة عن صديقي الذي لم يكن لديك الوصول إلى بيتا, و ليس لدي أي فكرة ما هو عليه كل شيء.

تحرير

هناك بالفعل بعض الأخطاء الإملائية ، شكرا Cheekysoft.ولكن المشكلة لا تزال قائمة.

هل كانت مفيدة؟

المحلول

الخاص بك نقاط لم يتم ضرب لأنك تستخدم الربيع اوب الوكلاء.انظر فهم-اوب-وكلاء للحصول على وصف كيف اوب وكلاء الخاصة.

أساسا إطار MVC هو الذهاب الى دعوة handleRequest الطريقة على جهاز تحكم الوكيل (التي على سبيل المثال MultiActionController كنت تستخدم كقاعدة الدرجة تنفذ) ، وهذه الطريقة سوف تجعل "الداخلية" الدعوة إلى rebuildThumbnail الأسلوب ، ولكن هذا لن تذهب من خلال وكيل وبالتالي لن تلتقط أي الجوانب.(هذا لا علاقة له مع أساليب نهائيا.)

لتحقيق ما تريد التحقيق في استخدام "الحقيقي" اوب عبر وقت تحميل النسيج (الربيع التي تدعم بشكل جيد جدا).

نصائح أخرى

AspectJ لا تعمل بشكل جيد مع الطبقات في الربيع ويب إطار MVC. قراءة الجزء السفلي من "فتح التمديد..." مربع على الجانب الأيمن من الصفحة

بدلا من أن نلقي نظرة على HandlerInterceptor واجهة.

ربيع جديد MVC الشروح قد تعمل بشكل جيد ومنذ ذلك الحين تحكم الطبقات كلها POJOs ، ولكن لم اجرب ذلك بنفسي.

الإعداد الأساسي تبدو على ما يرام.

جملة يمكن أن تكون مبسطة قليلا قبل لا تحديد في مكان pointcut فقط تحديد الطريقة التي بعد المشورة ينبغي أن تطبق.(اسمه pointcuts الطرق التي تم إنشاؤها تلقائيا بالنسبة لك.)

على سبيل المثال

@After( "com.example.bg.web.controllers.assets.AssetAddController.handleRequest()" )
public void afterHandleRequest() {
    log.info( "test111" );
}

@After( "com.example.bg.web.controllers.assets.AssetThumbnailRebuildController.rebuildThumbnail()" )   
public void afterRebuildThumbnail() {
    log.info( "test222" );
}

طالما rebuildThumbnail الطريقة ليست النهائية ، وطريقة اسم الدرجة الصحيحة.أنا لا أرى لماذا هذا لن يعمل.

انظر http://static.springframework.org/spring/docs/2.0.x/reference/aop.html

هذا هو بسيطة مثل التهجئة ؟ أم أن هناك فقط الأخطاء المطبعية في السؤال ؟ في بعض الأحيان كنت أكتب rebuildThumbnail وأحيانا تكتب rebildThumbnail

أساليب تحاول تجاوز المشورة ليست نهائية الأساليب في إطار MVC, لذلك حين bpapas الجواب هو مفيد ، ما أفهمه هو أن هذا ليس هو المشكلة في هذه الحالة.ومع ذلك ، يجب التأكد من أن rebuildThumbnail تحكم العمل ليس نهائيا

@bpapas:يرجى تصحيح لي إذا كنت مخطئا.مبرمج الخاصة تحكم العمل هو ما يحاول تجاوز.تبحث في MultiActionController المصدر (و والديه) فقط الانتهاء طريقة يحتمل أن تكون في المكدس MultiActionController.invokeNamedMethod, على الرغم من أنني لست متأكدا 100 ٪ إذا كان هذا سيكون في المكدس في ذلك الوقت أم لا.سيكون بعد الانتهاء طريقة أعلى المكدس يسبب مشكلة إضافة اوب المشورة إلى طريقة أخرى إلى أسفل ؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top