LogAspect.java
package com.aistart.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
@Aspect
public class LogAspect {
@Pointcut("execution(* com.aistart.service.impl.StudentServiceImpl.*(..))")
public void allServiceCut(){
}
@After("allServiceCut()")
public void LogInfoAfter(){
System.out.println("后置日志");
}
@Before("allServiceCut()")
public void LogInfoBefore(){
System.out.println("前置日志");
}
@AfterReturning(pointcut = "allServiceCut()",returning = "result")
public void doAfterReturning(String result) {
System.out.println("后置通知, 返回值: " + result);
}
@AfterThrowing(pointcut = "allServiceCut()",throwing = "e")
public void doAfterThrowing(Exception e) {
System.out.println("后置通知, 异常是: " + e);
}
@Around("allServiceCut()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("-----------------------");
System.out.println("环绕通知: 进入方法");
Object o = pjp.proceed();
System.out.println("环绕通知: 退出方法");
return o;
}
}
StudentServiceImpl.java
package com.aistart.service.impl;
import com.aistart.service.StudentService;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
@Service
public class StudentServiceImpl implements StudentService {
@Override
public void insertStudent() {
System.out.println("加入一个学生的业务");
}
@Override
public String reStudent() {
return "hello";
}
}
StudentService.java
package com.aistart.service;
public interface StudentService {
void insertStudent();
String reStudent();
}
annoApplicationContext.java
<?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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!--目标类-->
<bean id="studentService" class="com.aistart.service.impl.StudentServiceImpl"/>
<!--增强类/切面对象-->
<bean id="logAspect" class="com.aistart.aspect.LogAspect"/>
<!-- bean definitions here -->
<!--支持注解的自动代理-->
<aop:aspectj-autoproxy/>
</beans>
StudentServiceImplTest.java
package com.aistart.service.impl;
import com.aistart.service.StudentService;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.Assert.*;
public class StudentServiceImplTest {
@Test
public void insertStudent() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("annoApplicationContext.xml");
StudentService studentService = context.getBean( StudentService.class);
studentService.reStudent();
}
}