Package com.xyz

Source Code of com.xyz.TestAspect

package com.xyz;

import org.apache.log4j.Logger;
import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.aop.framework.ReflectiveMethodInvocation;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
* @author borisb
*/
public class TestAspect {

    private static final Logger log = Logger.getLogger(TestAspect.class);

    public Object invokeNew(ProceedingJoinPoint pjp) throws Throwable {
        log.info("aspect invoked");
        doWork();
        return pjp.proceed();
    }

    public Object invokeOld(ProceedingJoinPoint pjp) throws Throwable {
        log.info("aspect invoked");
        Field methodInvocationField = MethodInvocationProceedingJoinPoint.class.getDeclaredField("methodInvocation");
        methodInvocationField.setAccessible(true);
        ReflectiveMethodInvocation methodInvocation = (ReflectiveMethodInvocation) methodInvocationField.get(pjp);

        Field methodField = ReflectiveMethodInvocation.class.getDeclaredField("method");
        methodField.setAccessible(true);
        Method method = (Method) methodField.get(methodInvocation);

        Annotation annotation = method.getAnnotation(Secured.class);
        if (annotation != null) {
            log.info("do the aspects work");
            doWork();
        }
        return pjp.proceed();
    }

    private void doWork() throws Exception {
        // throw exception to easy check if aspect invoked
        throw new Exception("aspect invoked");
    }

}
TOP

Related Classes of com.xyz.TestAspect

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.