Deep Analysis of Spring Source Code (2nd Edition)-Solve the error of not being able to run the AOP usage example (aspectj)

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

Guess you like

Origin blog.csdn.net/cs373616511/article/details/107833530