Java Spring AOP-@在未执行之前

Java Spring AOP-@在未执行之前,java,spring-aop,pointcut,Java,Spring Aop,Pointcut,我试图使用带有就地切入点表达式的@Before通知来实现一个简单的SpringAOP(v4)示例,但没有调用aspect方法。我拥有所有必需的依赖项(SpringAOP、aopalliance、aspectweaver)。我做错了什么 package com.xyz; public class TestClass { @PostConstruct public void init() { test(); } public void test()

我试图使用带有就地切入点表达式的
@Before
通知来实现一个简单的SpringAOP(v4)示例,但没有调用aspect方法。我拥有所有必需的依赖项(SpringAOP、aopalliance、aspectweaver)。我做错了什么

package com.xyz;

public class TestClass {
    @PostConstruct
    public void init() {
        test();
    }
    public void test() {
       ...
    }
}
这方面:

@Aspect
@Component
public class MyAspect{
    @Before("execution(* com.xyz.TestClass.test())")
    public void beforeTest() {
       ...      
    }
}

没有执行AOP的原因是,
TestClass.test()
没有在spring上下文中调用,而是从
TestClass.init()
进行简单/简单的调用

要测试您的设置,请将其修改为与下面类似的内容,以便
TestClass.test()
调用由spring管理

package com.xyz;

public class TestClass {

   public void test() {
     ...
   }
}
TestClass
注入另一个类,比如说
AnotherTestClass
,然后从那里调用
test
方法

package com.xyz;

public class AnotherTestClass {

   @Autowired
   private TestClass testClass;

   public void anotherTest() {
     testClass.test();
   }
}

是否启用了Spring自动代理?您是如何创建
TestClass
的实例的?
TestClass
是在我的应用程序上下文中定义的bean。当应用程序启动时,它会在整个生命周期中运行,但切点永远不会被击中。我在应用程序上下文中也有
。还需要什么吗?在我的示例中,
TestClass
是一个spring管理的bean。它是在应用程序上下文中定义的。这还不够吗?不,正如我在回答要拦截的
TestClass.test()
时提到的,应该通过另一个bean调用它。同一bean中的普通调用不会影响已注册的方面?
TestClass
无法自动连接。但是,我可以将其设置为一个bean(在应用程序上下文中定义),它通过
另一个testclass
的构造函数(在应用程序上下文中定义的另一个bean)进行设置。有没有办法让它与给定的设置一起工作?谢谢如果两个bean都是在相同的上下文中定义的,那么您可以很好地自动关联它们。有什么具体的原因让你认为它不可能是这样的吗?没有太多的细节,这只是bean和应用程序的本质。