简介(aop作用):1.在不改变源代码的基础上进行功能添加,如日志打印、执行时间统计。2.与代理效果类似但更加便捷。
示例:
maven依赖:
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.20</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency>
<!-- 测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
dao接口:
public interface UserDao {public void save();
}
dao实现类:
@Component //声明为组件
public class UserDaoIim implements UserDao {@Overridepublic void save() {System.out.println("save");}
}
spring配置类(@EnableAspectJAutoProxy):
@Configuration //定义为配置类
@ComponentScan("")//包扫描
@EnableAspectJAutoProxy //开启aop
public class SpringConfig {}
通知类(核心):
@Aspect
@Component
public class MyAop {@Pointcut("execution(void com.dt.dao.UserDao.save())")//单的方法增强// @Pointcut("execution(void com.dt.dao.UserDao.*(参数))")//对所有方法增强,参数没有就不填public void pt(){}@Before("pt()")//对切点pt所代理的方法执行前增强public void before(){System.out.println("执行前增强");}@After("pt()")//对切点pt所代理的方法执行后增强public void after(){System.out.println("执行后增强");}@Around("pt()")//对切点pt所代理的方法执行环绕增强public void around(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("around,执行前增强");joinPoint.proceed();System.out.println("around,执行后增强");}@AfterReturning("pt()")//对切点pt所代理的方法返回后通知public void fterReturning() {System.out.println("执行后返回增强");}@AfterThrowing("pt()")//对切点pt所代理的方法报错后通知public void afterThrowing() {System.out.println("执行报错后增强");}
}
测试:
public class MyTest {private UserDao userDao;@Testpublic void springs(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springConfig.xml");userDao = applicationContext.getBean(UserDao.class);userDao.save();}
}