如何仅使用java配置在spring配置中定义方面

如何仅使用java配置在spring配置中定义方面,java,spring,annotations,aspectj,aspect,Java,Spring,Annotations,Aspectj,Aspect,以下是如何使用注释定义方面的示例: @Aspect public class BlaBla() { @Pointcut(...) ... @Before(...) ... @After(...) ... } 这是我通过研究发现的唯一方法。然而,我希望类BlaBla不会被注释和切入点方法污染。我希望它保持一个POJO。如果我使用xml spring配置,我可以很容易地做到: <bean id="blaBla" class="BlaBla"

以下是如何使用注释定义方面的示例:

@Aspect
public class BlaBla() {
    @Pointcut(...)
    ...

    @Before(...)
    ...

    @After(...)
    ...
}
这是我通过研究发现的唯一方法。然而,我希望类BlaBla不会被注释和切入点方法污染。我希望它保持一个POJO。如果我使用xml spring配置,我可以很容易地做到:

<bean id="blaBla" class="BlaBla">...</bean>

<aop:config>
    <aop:aspect ref="blaBla">
        <aop:pointcut .../>
        <aop:before .../>
        <aop:after .../>
    </aop:aspect>
</aop:config>
。。。

但是,我不是使用xml配置,而是使用Java配置。基本上,问题是,在不改变BlaBla类本身的情况下,我怎么能告诉spring类BlaBla是一个方面,而是在用
@Configuration
spring注释的java类中定义它。

您需要创建另一个类BlaBlaAopConfig或类似的东西作为您的配置类

Java配置与xml并没有什么不同,您需要定义它,并且应该与代码分开进行。当使用java配置而不是xml时,唯一的区别是清晰度更好(或更差,取决于个人喜好)。但您永远不希望在一个类中混合使用aop和pojo代码


您将在@Pointcut中定义您的目标类BlaBla

AOP ist的主要原则,以便在一个地方模块化一个交叉关注点(称为方面),就像将核心关注点模块化为一个类一样。你为什么要把它拆开?我从来就不理解这种方法。您的第一个代码示例说明了这一切:“这是一个方面BlaBla,包含以下切入点和建议等。”在我看来,您想要的只是没有意义。在一个方面中维护与方面相关的内容,而不是与之分开。当试图理解方面逻辑时,为什么要在两个地方搜索呢?因为BlaBla也是一个bean。从理论上讲,我可以将它用作一组接口的方面,同时将它注入到其他类中,并以不同的方式使用它。在这种情况下,我不希望我的bean有一个公共切入点方法,因为它在商业意义上可能不属于这个对象。对我个人来说,这似乎更为脱钩。好像我会更安全。如果以后我决定通过非aop方式使用BlaBla呢。在这种情况下,我只会删除配置,而不去碰它。我不相信你的论点,但祝你好运。我理解这一点,但在这种情况下BlaaopConfig会成为它自己的一个方面吗?因此,这是一个方面,它将方法前后的委托给BlaBla的bean。这和制作BlaBla方面有什么不同吗?换句话说,在我提供的xml示例中,BlaBla是一个方面。您提供的示例使blaaopconfig成为一个方面,委托给作为pojo的BlaBla。我想要的是xml配置的代码等价物,我想在SpringConfig.java中声明BlaBla是一个方面这一事实。但同时不要碰BlaBla类,把它当作POJO,这没有任何意义。BlaBla是POJO,它本身不应该是一个方面。与xml等价的代码正是我的解决方案。在xml中,您只得到了对对象的引用,这将在BlaaopConfig中的@Pointcut中执行。您有两个独立的xml标记,一个用于bean,一个用于aop,java配置只是用java编写配置的一种方式,所以您需要完全相同的东西!经过一番思考,我意识到我对它太严格了。你是对的。