Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. # 关于@Pointcut的思考。
  2. > 最近在写微服务公共组件的切面时,被要求切点表达式最好可以通过各服务配置文件外部读取的方式获得。
  3.  
  4. 最后发现使用`SpringAop`说比较难以实现的,根本原因如下:
  5.  
  6. **`@Pointcut`的`value`值需要一个编译期常量。**
  7.  
  8. 1、编译期简单来说就是从源码打包到jar包的过程,之后的运行期自然是类加载运行的过程。
  9. 2、编译期常量会在编译的时候直接将实际值编译成自己文件,即在编译期就能找到常量的值。
  10. 3、spring-aop的原理(除了运行时织入)就是在编译时就将其转换为经过切面代理的字节文件。
  11. 4、类似@Value使用的占位符即是运行时从外部文件读取注入的。
  12. 5、一个疑问是,为什么`@Pointcut`的RetentionPolicy是Runtime。
  13.  
  14. 那什么样的值会被认为是编译期常量?他必须包含以下全部:
  15.  
  16. * 声明为final
  17. * 基本类型或者是String
  18. * 在声明的时候初始化
  19. * 初始化使用的是常量表达式!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement