创建主方法类
public class Runner {
public Runner() {
System.out.println("我是一个领跑者");
}
public void run() {
// int a = 40/0;
System.out.println("跑起来");
}
}
给run()方法加切面,执行前,执行后,执行完成,出现异常都记录下来
@Aspect
public class RunAspect {
@Pointcut("execution(public void cn.sjxy.spring_aop.aopDemo.Runner.*(..))")
public void pointcut() {}
@Before("pointcut()")
public void runStart() {
System.out.println("系好鞋带");
}
@After("pointcut()")
public void runEnd() {
System.out.println("跑完了,歇会");
}
@AfterReturning("pointcut()")
public void runFinished() {
System.out.println("跑步结束");
}
@AfterThrowing("pointcut()")
public void runException() {
System.out.println("跑步发生异常");
}
}
这里说一下切点@Poincut
语法:
@Pointcut(“execution(访问控制符+返回值类型+包名.类名.*(…))”)
public void pointcut(){}
解释一下:写一个空方法上面加个@Pointcut注解,括号中的内容含义是被选中的方法的全限定方法名,那个星号就是所有方法的意思,(点点)代表所有参数
本类中使用切点,直接在注解后面括号写上这个切点方法名加() 也就是本例子中的pointcut()
其他类要访问这个切点,可以通过使用这个切点方法的全限定方法名,例子中就是包名.类名.方法名()
下面写配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@EnableAspectJAutoProxy
@Configuration
public class Config {
@Bean
public Runner runner() {
return new Runner();
}
@Bean
public RunAspect runAspect() {
return new RunAspect();
}
}
最后写测试类,我直接用main方法来做
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MainTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(Config.class);
Runner bean = annotationConfigApplicationContext.getBean(Runner.class);
bean.run();
}
}
运行结果:
加上那个40/0以后