2017-02-26 30 views
1

这里定义的Spring配置内部的方面是如何定义使用批注方面的例子:如何使用Java配置仅

@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是一个没有改变BlaBla类本身的方面,而是在一个java类中定义它,注解是@Configuration spring注释。

+0

AOP IST的主要原则modularise一个横切关注点 - 所谓的一个方面 - 在一个地方像你这样modularise一个核心关注到一个类。为什么你想撕开它呢?我从未理解这种方法。你的第一个代码示例说明了这一切:“这是BlaBla的一个方面,包含以下切入点和建议等。”你想要的只是没有意义的IMO。在一个方面维护方面相关的东西,而不是与它分开。为什么在试图理解方面逻辑时在两个地方搜索? – kriegaex

+0

因为BlaBla也是一个bean。理论上我可能希望将它用作一组接口的方面,同时将它注入其他类并以不同的方式使用它。在这种情况下,我不希望我的bean有一个公共切入点方法,因为它可能不属于这个对象在商业意义上的含义。对我个人而言,它似乎也更加孤立。好像我会更安全。如果后来我决定通过非aop方式使用BlaBla,会怎么样?在这种情况下,我只是删除配置,而不是触及它。 –

+0

我不会购买你的观点,但祝你好运。 – kriegaex

回答

0

您需要创建另一个类BlaBlaAopConfig或类似于您的配置类的类。

Java配置与xml没有区别,您需要定义它,并且您应该将它与您的代码分开。只有在使用java config over xml时才会有所不同,或者更糟(取决于个人偏好)。但是你不想在一个类中混合aop和pojo代码。

您将定义@Pointcut你的目标类BLABLA

+0

我明白这一点,但在这种情况下BlaBlaAopConfig成为它自身的方面?所以这是一个委托方法之前和之后的BlaBla bean的一个方面。与制作BlaBla方面不同吗? 换句话说,在我提供的xml示例中,BlaBla是一个方面。 您提供的示例使BlaBlaAopConfig成为委托给Blajo的一个方面,这是一个pojo。我想要的是一个等价于xml配置的代码,我想在SpringConfig.java中声明BlaBla是一个方面。但同时不要触及BlaBla课堂并将其留作POJO。 –

+0

那么它没有任何意义。 BlaBla是POJO,它本身不应该是一个方面。相当于xml的代码正是我的解决方案。在xml中,您只需引用您在BlaBlaAopConfig中的@Pointcut中执行的对象。你有两个**独立的** xml标签,一个用于aop和java配置的bean一个只是在java中编写配置的方法,所以你需要完全一样的东西! – mklimasz

+0

经过一番思考,我意识到我对此太严格了。你是对的。 –

相关问题