java spring自定义注解_【java自定义注解2】java自定义注解结合Spring AOP

承接上一篇,注解应用于属性,本篇定义了一个用于方法的注解,结合Spring AOP 实现 切面编程。

以下demo演示使用了SpringBoot,与SSM中使用方式大致相同,效果如下:

1、自定义注解(用于方法)

/**

* 自定义注解

* @author Zx

*

*/

@Target(ElementType.METHOD)//作用于方法

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface MethodAonn {

//注解属性

String name() default "";;

String prot() default "";;

String value() default "默认值";

}

2、自定义Controller,使用自定义注解

/**

* 测试用控制器

*/

@RestController

@RequestMapping("asp")

public class WorkController {

@RequestMapping("/exec")

//使用自定义注解

@MethodAonn(name = "注解name属性")

public void extcute() {

System.out.println("extcute()方法执行");

};

@RequestMapping("/stop")

@MethodAonn(name = "被注解方法开始执行")

public void stop() {

System.out.println("stop()方法执行");

};

}

3、创建切面

@Aspect // 注解声明一个切面

@Component // 受spring管理的容器

public class MethodAspect {

@Pointcut("@annotation(com.xxx.ann.simple2.MethodAonn)") // 注解声明切点,注解的全限定名

public void annotationPointcut() {

};

@After("annotationPointcut()")

public void after(JoinPoint joinPoint) {

MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();

Method method = methodSignature.getMethod();

String name = method.getName();

MethodAonn annotation = method.getAnnotation(MethodAonn.class);

System.out.println("拦截 : " + name+"方法执行");

System.out.println(">>>: " + annotation.name());

}

}

4、启动类启动容器

@SpringBootApplication

@Configuration //注册被spring管理

@EnableAspectJAutoProxy //注解开启对aspectJ的支持

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

5、启动后通过req访问测试:

6、拦截结果:

extcute()方法执行

拦截 : extcute方法执行

>>>: 注解name属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值