欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring AOP自定义注解样例

程序员文章站 2022-03-10 13:44:49
...

Spring AOP自定义注解样例

 

参考:http://www.cnblogs.com/shipengzhi/articles/2716004.html 

 

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Ann {

    String value();

}

 

注解处理器
public class AnnoSupport {
    /**
     * 处理过程
     * @param joinPoint AOP切入点
     * @return
     * @throws Throwable
     */
    public Object doSupport(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("doSupport");
        try {
            return process(joinPoint);
        } catch (Throwable t) {
            throw t;
        }
    }

    /**
     * 处理过程
     * @param joinPoint AOP切入点
     * @return
     * @throws Throwable
     */
    private Object process(ProceedingJoinPoint joinPoint) throws Throwable {
	System.out.println("process");
        Class<?> clazz = joinPoint.getTarget().getClass();
        String className = clazz.getSimpleName();//获取类名

        Signature signature = joinPoint.getSignature();
        Method method = ((MethodSignature) signature).getMethod();
        String methodName = method.getName();//获取方法名

        Method realMethod = clazz.getMethod(methodName, method.getParameterTypes());
	if (realMethod.isAnnotationPresent(Ann.class)) {
		... ...

		Ann ann = realMethod.getAnnotation(Ann.class);//获取注解
		System.out.println("ann:" + ann.value());
        }	
        return joinPoint.proceed();//执行方法
    }
 }

 

 spring配置

    <bean id="annoSupport" class="com.test.AnnoSupport"/>

    <bean id="TestAnn" class="com.test.TestAnn">
    </bean>
    <!-   注册注解处理器 -->
    <aop:aspectj-autoproxy/>
    <aop:config>
        <aop:aspect ref="annoSupport">
            <aop:pointcut id="supportMethod"
                          expression="@annotation(com.test.Ann)"/>
            <aop:around pointcut-ref="supportMethod" method="doSupport"/>
        </aop:aspect>
    </aop:config>

 

 

测试类
public class TestAnn {

    @Ann("test")
    public String ann(String test){
        return test;
    }

    public static void main(String[] args){
    ApplicationContext ac = new FileSystemXmlApplicationContext("file:D:\\workspace\\src\\main\\java\\com\\test\\applicationContext.xml");
        TestAnn test = (TestAnn)ac.getBean("TestAnn");
	test.ann("Test ann");
    }
    
}