为什么应用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("我是前置告诉!!!");    }}