我有一个类,类里面的某个方法上有一个自定义注解,现在我想用 aop 拦截这个类的所有方法,可以实现吗?如果能实现这个切点表达式该怎么写呢?
2
cjlmwcy 2021-04-27 23:10:47 +08:00
package.path.ClassName 是你自定义注解的全路径
|
6
sqmwin 2021-04-28 00:01:00 +08:00
一定要这样做吗?目的是什么
|
7
caixiaomao 2021-04-28 08:24:19 +08:00
@Pointcut("execution(* com.github.controller.xxclass.*(..))")
|
8
gitdoit 2021-04-28 08:54:22 +08:00
自带的满足不了需求的话,spring 应该留了扩展,可以查一下
|
9
fpure OP @sqmwin 我需要在系统启动之后一段时间需要执行一个任务,我想把执行这个任务的时间点放在用户对这个类做任何操作之前;这样的话我就想用 aop 来实现这个功能,否则我就要在每个方法前都加上某段初始化逻辑;我也不想为了实现这个功能定义俩个注解,类上一个方法上一个
|
10
Kasumi20 2021-04-28 09:18:44 +08:00
你用的是加载时编织吗?
|
12
Kasumi20 2021-04-28 09:28:26 +08:00
|
16
xiaoxinshiwo 2021-04-28 09:47:11 +08:00
懂你的描述了,好麻烦啊,可否将自定义注解加在类上啊
|
18
Xhack 2021-04-28 09:50:48 +08:00
execution(访问权限符 返回值类型 方法全类名(参数表))
|
19
liudaolunhuibl 2021-04-28 09:51:36 +08:00
做不到的吧,只能切这个方法,或者你把注解写在类上
|
20
fpure OP @xiaoxinshiwo 我对 spring aop 的期望太理想化了,我简直无法理解 pointcut 函数存在的目的仅仅是为了定义一个切点表达式,哪怕是用这个函数判断那些类和函数可不可以被拦截也好啊
|
21
xiaoxinshiwo 2021-04-28 09:57:40 +08:00
@fpure 异步事件就能搞定哦
|
22
fpure OP @xiaoxinshiwo 我这个程序是 1+n 的架构,1 端启动之后通知 n 端注册,所以我并不知道 n 端什么时候全部注册成功,而我要执行的任务依赖 n 端注册,所以我只能延迟执行+定时执行这个任务
|
23
xiaoxinshiwo 2021-04-28 10:04:22 +08:00
@fpure 可以发消息,接收到 N+1 个注册完成的消息再执行任务
|
24
fpure OP @xiaoxinshiwo 我并不知道有多少个 n 端
|
25
xiaoxinshiwo 2021-04-28 10:06:55 +08:00
@fpure 好吧
|
26
fpure OP @xiaoxinshiwo 找到了 Executors.newSingleThreadScheduledExecutor().schedule(command, delay, unit)是我想要的
|
27
xiaoxinshiwo 2021-04-28 10:21:15 +08:00
@fpure 我去学习下
|
28
xiaoxinshiwo 2021-04-28 10:22:00 +08:00
@fpure 不过你这个延迟多久呢?怎么计算的?
|
29
fpure OP @xiaoxinshiwo 不用计算,因为无法知道 n 端是否全部注册,所以我这里直接延迟一段时间,然后再用定时去刷就行了
|
30
shanghai1943 2021-04-28 16:25:01 +08:00
不知道你的具体业务场景,可否换个思路解决呢。比如去做注册监听,有注册上来的时候才处理。不知道这样是否满足。
|
31
fpure OP @shanghai1943 已经换思路解决了
|