Spring AOP - 不调用方法方面

时间:2014-01-07 04:16:25

标签: spring aop

抱歉:Google Traductor(英文基础)

通过方面实现的接口:

public interface MinReader {

    void interceptThoughts();
}

实现接口的MinReader类,其中包含“Aspect”

@Aspect
public class Magician implements MinReader {

    @Pointcut("within(paquetea.paqueteb.*)")
    public void thinking() {

    }

    @Override
    @Before("thinking()")
    public void interceptThoughts() {
        // Codigo
    }
}

这是我的JavaConfig的一部分:

@Configuration
@EnableAspectJAutoProxy
public class SpringIdolConfig {

    @Bean
    public MinReader magician() {
        return new Magician();
    }

     // Otros bean
}

问题是永远不会调用“interceptThoughts”方法。

我的“解决方案”是在我的JavaConfig中更改方法“魔术师”的返回类型: “MinReader” - > “精灵”

@Bean
public Magician magician() {
    return new Magician();
}
  • 为什么?
  • 有没有办法使用“MinReader”代替“魔术师”?

更新:这些是其他豆类:

package paquetea.paqueteb;

public interface Thinker {  
    void thinkOfSomething(String thoughts);
}

package paquetea.paqueteb;

public class Volunteer implements Thinker {
    @Override
    public void thinkOfSomething(String thoughts) {
        //code
    }
}

这是我完整的javaconfig:

@Configuration
@EnableAspectJAutoProxy
public class SpringIdolConfig {

    @Bean
    public MinReader magician() {
        return new Magician();
    }

    @Bean
    public Thinker volunteer() {
        return new Volunteer();
    }
}

1 个答案:

答案 0 :(得分:0)

我猜了一下,但我认为你的一个问题是你的切入点表达错了。如果我正确阅读the examples in here,您应该使用:

@Pointcut("within(paquetea.paqueteb..*)")

请注意..*,而不是您拥有的.*。我发现当我得到切入点错误时,它们可能很难调试,因为它们正常的失败方式是默默地不附加任何东西。 (我首选的技术是附加到使用自定义注释注释的方法;这样可以轻松控制正在发生的事情并且易于调试。)