为什么应用AOP?
问题1: 将缓存的代码间接写到业务中,只对某个业务无效,如果其余业务也须要缓存,则须要反复编辑…
问题2: 如果将缓存代码间接写死在业务层,如果前期代码须要更新时,代码的耦合性高. 不便于扩大…
解决方案: 应用AOP形式实现…
名称: 面向切面编程.
核心作用: 在不扭转原有代码的条件下 对办法进行性能扩大.
AOP结构因素 = 切入点表达式 + 告诉办法.
spring中的两大外围机制:
1:管制反转(IOC)+依赖注入(DI)
管制反转:将对象创立的势力交给容器,由容器管制对象的生命周期
注入形式一: 通过bean的id进行注入。
bean:被spring容器治理的对象称之为bean。
bean的id为类名首小字母小写。(@Autowired+@Qualifier(“itemCatServiceImpl”))
应用注解@Qualifier
注入形式二: 通过类型注入。 spring规定个别的接口都是单实现
2:AOP
常见切入点表达式
名称解释: 被Spring容器治理的对象称之为bean.
1). bean(“bean的Id”) 个别类名首字母小写 依照某个类匹配
2). within(“包名.类名”) 依照指定的类目录(多个类) 上述2个操作粒度较粗 按类匹配
3). execution(返回值类型 包名.类名.办法名(参数列表…)) 管制办法参数级别 粒度较细
4). annotation(“包名.注解名”) 依照特定的注解进行拦挡. 支流语法
告诉办法
1)before 指标办法执行前执行
2)afterReturnoing 指标办法执行之后执行
3)afterThrowing 指标办法抛出异样时执行
4)after 程序最初执行
上述四大告诉类型 个别用来记录程序的执行的状态, 为监控零碎提供数据的反对的 . 只能监控不能解决.
5)around 指标办法执行前后都要执行
盘绕告诉是5大告诉中性能最为弱小的. 能够控制目标办法是否执行.(管制业务是否操作).
@Component //交给Spring容器治理
@Aspect //标识AOP切面类
public class RedisAOP {
//1.定义切入点表达式 粗粒度(类) 细粒度(办法)
@Pointcut("bean(itemCatServiceImpl)")
public void pointCut(){
}
//joinPoint连接点
@Before("pointCut()")
public void before(JoinPoint joinPoint){
Class targetClass = joinPoint.getTarget().getClass();
Object[] args = joinPoint.getArgs();
String methodName = joinPoint.getSignature().getName();
String ClassName = joinPoint.getSignature().getDeclaringTypeName();
System.out.println("获取指标对象的类型:"+targetClass);
System.out.println("获取指标参数:"+ Arrays.toString(args));
System.out.println("获取指标办法名称:"+ methodName);
System.out.println("获取指标类的门路:"+ ClassName);
System.out.println("我是前置告诉!!!");
}
}
发表回复