I. Introduction
Running according to the example in the book will report an error: Symbols not found: classes JCacheCacheAspect, JtaAnnotationTransactionAspect, AnnotationTransactionAspect, AnnotationCacheAspect, AnnotationAsyncExecutionAspect, AnnotationBeanConfigurerAspect are as follows:
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\cache\aspectj\AspectJJCacheConfiguration.java
Error:(42, 16) java: 找不到符号
符号: 类 JCacheCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
Error:(43, 17) java: 找不到符号
符号: 类 JCacheCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
Error:(43, 49) java: 找不到符号
符号: 变量 JCacheCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJJCacheConfiguration
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\transaction\aspectj\AspectJJtaTransactionManagementConfiguration.java
Error:(43, 16) java: 找不到符号
符号: 类 JtaAnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJJtaTransactionManagementConfiguration
Error:(44, 17) java: 找不到符号
符号: 类 JtaAnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJJtaTransactionManagementConfiguration
Error:(44, 59) java: 找不到符号
符号: 变量 JtaAnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJJtaTransactionManagementConfiguration
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\transaction\aspectj\AspectJTransactionManagementConfiguration.java
Error:(43, 16) java: 找不到符号
符号: 类 AnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration
Error:(44, 17) java: 找不到符号
符号: 类 AnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration
Error:(44, 56) java: 找不到符号
符号: 变量 AnnotationTransactionAspect
位置: 类 org.springframework.transaction.aspectj.AspectJTransactionManagementConfiguration
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\cache\aspectj\AspectJCachingConfiguration.java
Error:(42, 16) java: 找不到符号
符号: 类 AnnotationCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
Error:(43, 17) java: 找不到符号
符号: 类 AnnotationCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
Error:(43, 53) java: 找不到符号
符号: 变量 AnnotationCacheAspect
位置: 类 org.springframework.cache.aspectj.AspectJCachingConfiguration
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\scheduling\aspectj\AspectJAsyncConfiguration.java
Error:(44, 16) java: 找不到符号
符号: 类 AnnotationAsyncExecutionAspect
位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
Error:(45, 17) java: 找不到符号
符号: 类 AnnotationAsyncExecutionAspect
位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
Error:(45, 62) java: 找不到符号
符号: 变量 AnnotationAsyncExecutionAspect
位置: 类 org.springframework.scheduling.aspectj.AspectJAsyncConfiguration
D:\workspace\spring-framework\spring-aspects\src\main\java\org\springframework\context\annotation\aspectj\SpringConfiguredConfiguration.java
Error:(19, 49) java: 找不到符号
符号: 类 AnnotationBeanConfigurerAspect
位置: 程序包 org.springframework.beans.factory.aspectj
Error:(47, 16) java: 找不到符号
符号: 类 AnnotationBeanConfigurerAspect
位置: 类 org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration
Error:(48, 24) java: 找不到符号
符号: 变量 AnnotationBeanConfigurerAspect
位置: 类 org.springframework.context.annotation.aspectj.SpringConfiguredConfiguration
Second, the solution steps
1. The cause of the problem
Through Baidu, the cause of the problem is that the AOP of the spring source code uses aspectj, but java does not recognize aspectj
Baidu Encyclopedia:
2.下载AspectJ
https://www.eclipse.org/aspectj/downloads.php
3. Installation
Win10 installation method, execute in the cmd window
pop up
Installed
4. Add facet attributes
选择spring.spring-aop.main
Follow the above steps to add spring.spring-aspects.main and the
final result is shown in the figure
5. Change the compiler
Three, run AOP usage example
1.gradle introduces aop related projects
2. Source code
TestBean
public class TestBean {
private String testStr;
public String getTestStr() {
return testStr;
}
public void setTestStr(String testStr) {
this.testStr = testStr;
}
public void test() {
System.out.println("test");
}
}
AspectJTest
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
@Aspect
public class AspectJTest {
@Pointcut("execution(* *.test(..))")
public void test() {
}
@Before("test()")
public void beforeTest() {
System.out.println("beforeTest");
}
@After("test()")
public void afterTest() {
System.out.println("afterTest");
}
public Object aroundTest(ProceedingJoinPoint p) {
System.out.println("before1");
Object o = null;
try {
o = p.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
System.out.println("after1");
return o;
}
}
AspectTestDoMain
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AspectTestDoMain {
public static void main(String[] args) {
ApplicationContext bf = new ClassPathXmlApplicationContext("chapter07/aspectTest.xml");
TestBean bean = (TestBean) bf.getBean("test");
bean.test();
}
}
aspectTest.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
http://wwww.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<aop:aspectj-autoproxy/>
<bean id="test" class="com.asyf.chapter07.TestBean"/>
<bean class="com.asyf.chapter07.AspectJTest"/>
</beans>
3. Test
Reference blog: https://blog.csdn.net/s_156/article/details/107233811