gpt4 book ai didi

java - 使用 AspectJ 的 AOP 在 Spring 不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:50:38 24 4
gpt4 key购买 nike

我的 Aspect 类将是

@Configuration
@EnableAspectJAutoProxy
@Component
@Aspect
public class AspectClass {

@Before("execution(* com.pointel.aop.test1.AopTest.beforeAspect())")
public void logBefore(JoinPoint joinPoint) {

System.out.println("Before running the beforeAspect() in the AopTest.java class!");
System.out.println("Hijacked Method name : " + joinPoint.getSignature().getName());
System.out.println("************************");
}

}

我的另一个java类

public class AopTest {

public void beforeAspect() {
System.out.println("This is beforeAspect() !");
}
}

我的主课是

public class MainMethod {

public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("ApplicationContext/applicationContext.xml");
AopTest test = (AopTest)context.getBean("bean1");
test.beforeAspect();
}
}

我的applicationContext.xml是,

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd ">

<bean id="bean1" class="com.pointel.aop.test1.AopTest" />

</beans>

在此AspectClass中的@Before("execution(* com.pointel.aop.test1.AopTest.beforeAspect())")不会被执行在 AopTest 中的 beforeAspect() 之前,运行 Main 方法时。

非常感谢好的答案。

最佳答案

首先,如果您要使用基于注释的配置,请使用 AnnotationConfigApplicationContext 而不是 FileSystemXmlApplicationContext。去掉 applicationContext.xml 文件,在配置类中简单地添加一个 @Bean 方法。像这样:

@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "your.aspect.package")
public class AspectConfig {
@Bean
public AopTest aopTest() {
return new AopTest();
}
}

在你的主要

public class MainMethod {

public static void main(String[] args) {
AnnotationConfigApplicationContextcontext = new AnnotationConfigApplicationContext(AspectConfig.class);
// don't forget to refresh
context.refresh();
AopTest test = (AopTest)context.getBean("aopTest");
test.beforeAspect();
}
}

AspectClass中,你应该有@Component@Aspect,你的方法应该有像@这样的通知或切入点注解之前。它需要是一个 @Component,以便 Spring 知道扫描它。

关于java - 使用 AspectJ 的 AOP 在 Spring 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15662013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com