创建基本 Java 库以使用注释更改方法 return
Create basic Java lib to change the method return using annotion
如何使用 AOP 概念创建基本库?
我想创建一个带有一些注释和方面的库,并将其配置为其他项目中的依赖项。
有没有一种非侵入式的方式来做到这一点?我不想使用 @EnableAspectJAutoProxy 配置主项目或插入其他依赖项。
谢谢
如果你想使用AOP,你将需要使用或SpringAOP或AspectJ。
没有@EnableAspectJAutoProxy,你将无法使用AspectJ,记住JAVA默认不支持AOP。
我认为这个问题基本上有两个不同的问题:
- 如何在 spring boot
中创建可重复使用的库
- 如何做方面相关的东西
第 1 部分
要回答问题的第一部分,我建议阅读有关 spring 工厂的文章。
这种机制基本上允许定义一个自动配置,这样当你导入带有 spring 工厂的模块时 spring 客户的引导应用程序将自动检测你的 beans 并将它们加载到应用程序上下文中.
一旦你掌握了这个概念,你会发现不同的 spring 引导项目有不同的组件扫描策略,所以你真的想依赖组件扫描,因此你将创建一个 Java 配置你将注册所有 bean 的位置。
此 java 配置(@Configuration
注释 class)将在 spring.factories
中指定 - IMO 在这种情况下肯定会得到回报的小开销。
关于这个模块的API,可能最好的方法是定义一些runtime
保留策略的注解)以便模块的用户在他们的代码中使用它们。他们会有这些注释,因为他们应该将您的模块作为依赖项添加到他们的代码中。
这里的最后一点是:库的模块应该是一个普通的 JAR 而不是 spring 启动应用程序之类的,所以你不需要在这里使用 spring-boot-maven-plugin
第 2 部分
接下来是第二部分。
是的,AOP 可以在这里为您工作,但是这需要应用程序引入整个 AOP 框架。虽然这是可能的,但我认为这不是理想的方式:许多人不会真正喜欢这种方式,因为它太具有侵入性了。
在spring的paralance中,有一个BeanPostProcessors的概念。在这种情况下,这可能是更好的选择。从本质上讲,您可以获得与 Spring AOP 类似的结果,但无需真正引入 AOP。
有很多关于 bean post 处理器的 material,给你一个概念,这些是普通的 bean(这就是为什么我谈到 java 配置的原因spring 不同对待的豆子):
加载后,它们可以应用于所有其他 bean,除此之外,它们还可以在生成的代理中包装一个看起来相关的 bean(读取带有模块 API 公开的注释的注释) -飞。这个代理可以改变注释方法的行为,改变结果,缓存结果,窃听调用,做任何你想做的事)。
如何使用 AOP 概念创建基本库? 我想创建一个带有一些注释和方面的库,并将其配置为其他项目中的依赖项。
有没有一种非侵入式的方式来做到这一点?我不想使用 @EnableAspectJAutoProxy 配置主项目或插入其他依赖项。
谢谢
如果你想使用AOP,你将需要使用或SpringAOP或AspectJ。 没有@EnableAspectJAutoProxy,你将无法使用AspectJ,记住JAVA默认不支持AOP。
我认为这个问题基本上有两个不同的问题:
- 如何在 spring boot 中创建可重复使用的库
- 如何做方面相关的东西
第 1 部分
要回答问题的第一部分,我建议阅读有关 spring 工厂的文章。 这种机制基本上允许定义一个自动配置,这样当你导入带有 spring 工厂的模块时 spring 客户的引导应用程序将自动检测你的 beans 并将它们加载到应用程序上下文中.
一旦你掌握了这个概念,你会发现不同的 spring 引导项目有不同的组件扫描策略,所以你真的想依赖组件扫描,因此你将创建一个 Java 配置你将注册所有 bean 的位置。
此 java 配置(@Configuration
注释 class)将在 spring.factories
中指定 - IMO 在这种情况下肯定会得到回报的小开销。
关于这个模块的API,可能最好的方法是定义一些runtime
保留策略的注解)以便模块的用户在他们的代码中使用它们。他们会有这些注释,因为他们应该将您的模块作为依赖项添加到他们的代码中。
这里的最后一点是:库的模块应该是一个普通的 JAR 而不是 spring 启动应用程序之类的,所以你不需要在这里使用 spring-boot-maven-plugin
第 2 部分
接下来是第二部分。 是的,AOP 可以在这里为您工作,但是这需要应用程序引入整个 AOP 框架。虽然这是可能的,但我认为这不是理想的方式:许多人不会真正喜欢这种方式,因为它太具有侵入性了。
在spring的paralance中,有一个BeanPostProcessors的概念。在这种情况下,这可能是更好的选择。从本质上讲,您可以获得与 Spring AOP 类似的结果,但无需真正引入 AOP。
有很多关于 bean post 处理器的 material,给你一个概念,这些是普通的 bean(这就是为什么我谈到 java 配置的原因spring 不同对待的豆子):
加载后,它们可以应用于所有其他 bean,除此之外,它们还可以在生成的代理中包装一个看起来相关的 bean(读取带有模块 API 公开的注释的注释) -飞。这个代理可以改变注释方法的行为,改变结果,缓存结果,窃听调用,做任何你想做的事)。