Java配置实现AOP

来源:互联网 发布:网络直播现象研究 编辑:程序博客网 时间:2024/06/11 00:22

业务类

package com.csl.demo2.demo2.aop;import org.springframework.stereotype.Service;/** *  * @author Cherry * @date 2017年10月1日 * */@Servicepublic class AopTest {        //自定义之注解        @Action(value = "注解之内容!")        public void show () {            System.out.println("一个方法!");        }}

切面对象

package com.csl.demo2.demo2.aop;import java.lang.reflect.Method;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;/** *  * @author Cherry * @date 2017年10月1日 * */@Aspect@Componentpublic class Aspacts {        //切入点作用的方法        @Pointcut("execution(* com.csl.demo2.demo2.aop.AopTest.*(..))")        public void point() {}        //前置通知        @Before("point()")        public void afterAop() {            System.out.println("方法之前!");        }        //后置通知        @After("point()")        public void before(JoinPoint joinPoint) {            MethodSignature ms = (MethodSignature) joinPoint.getSignature();            Method m = ms.getMethod();            //获取方法的注解内容            String v = m.getAnnotation(Action.class).value();            System.out.println("方法之后!\n方法上的注解值:"+ v);        }}

Java配置类

package com.csl.demo2.demo2.aop;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;/** *  * @author Cherry * @date 2017年10月1日 * */@Configuration//Java配置类@ComponentScan("com.csl.demo2.demo2")@EnableAspectJAutoProxy//开启Spring对AspactJ的代理public class AopConfig{}

自定义注解类Action

package com.csl.demo2.demo2.aop;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** *  * @author Cherry * @date 2017年10月1日 * */@Target(ElementType.METHOD)//作用于方法上@Retention(RetentionPolicy.RUNTIME)//运行时执行@Documentedpublic @interface Action {        String value();}

测试类

package com.csl.demo2.demo2.aop;import org.springframework.context.annotation.AnnotationConfigApplicationContext;/** *  * @author Cherry * @date 2017年10月1日 * */public class Main {        public static void main(String[] args) {            @SuppressWarnings("resource")            //使用AnnotationConfigApplicationContext容器            AnnotationConfigApplicationContext aac = new AnnotationConfigApplicationContext(AopConfig.class);            //获取业务对象            AopTest  at = (AopTest) aac.getBean("aopTest");            at.show();            aac.destroy();        }}

运行结果

方法之前!一个方法!方法之后!方法上的注解值:注解之内容!
原创粉丝点击