Aop 了解

什么是Aop?

Aop是spring框架提供的切面编程,次要作用与在不批改原有业务的时候扩大新的业务.升高程序的耦合度,加强程序的开发效率.代码失去重用性.

Aop如何实现

Aop实现次要有两种形式

配置中如果没有配置那么默认应用的是cglib
1.jdk自代的动静代理.为指标对象创立代理对象
2.cglib代理机制,为指标创立代理对象

什么是OCP准则(开闭准则)?

ocp开闭准则是对业务批改敞开,对业务扩大开发

AOP 相干术语剖析

@Async 进行异步操作spring框架会在底层创立一个新的线程池,被@Async润饰的办法会又线程池调配的一个线程来进行调用.
@Order 设置优先级,设置数字优先级越高优先级也就越高

五大告诉

@Advice 告诉.在切面的某一个链接点进行告诉操作例如:
1.@befor:第二程序执行不论失 前置告诉
2.@Around:优先级最高 盘绕告诉
3.@After:不论程序执行胜利与否当快要执行完时都会先执行 后置告诉
4.@AfterReturning: 程序执行胜利执行 返回告诉
5.@Afterthwing: 程序执行失败执行 异样告诉

四大连接点

@poincut 切面编程的切入点~~~~
1.bean(间接指定保留在bean中的对象)粗略的切入点,该类下所有的办法都能够进行办法的扩大
2.@annotation(指定注解接口的全限定类名),细腻的切入点,只有被该注解润饰的办法才会有办法的扩大
3.within 用于匹配包下的所有类中的所有办法
4.execution 用于指定办法~~~~

Spring AOP事务处理

@Transaction
默认事务回滚
@Transaction(timeout:时长到时主动回滚事务)

如何获取注解上的值

//1.获取用户行为日志信息        //获取指标对象(要执行的那个指标业务对象)类        Class<?> getcls = jp.getTarget().getClass();        MethodSignature sim = (MethodSignature) jp.getSignature();//强转是为了让他获取更多的办法        Method methods = getcls.getDeclaredMethod(sim.getName(), sim.getParameterTypes());        System.out.println(methods);        //判断是否是LoginObject的注解值         LoginObject falg = methods.getAnnotation(LoginObject.class);        String operation="operation";        if(falg!=null)            operation = falg.value();

盘绕告诉最为重要,重点一下

由@Around注解形容的办法为一个盘绕告诉办法,咱们能够在此办法外部         手动调用指标办法(通过连接点对象ProceedingJoinPoint的proceed办法进行调用)          盘绕告诉:此盘绕告诉应用的切入点为bean(sysUserServiceImpl)          盘绕告诉特点:        1)编写:      a)办法的返回值为Object.      b)办法参数为ProceedingJoinPoint类型.      c)办法抛出异样为throwable.           2)利用:      a)指标办法执行之前或之后都能够进行性能拓展      b)绝对于其它告诉优先级最高。        @param jp 为一个连贯对象(封装了正在要执行的指标办法信息)        @return 指标办法的执行后果      @throws Throwable 

事务Transaction的解决

@Transactional(timeout = 30,    //执行时长到时主动回滚 readOnly = false,              //只读事务,*   为了疏忽那些不须要事务的办法,比方读取数据,能够设置 read-only 为 true。 isolation = Isolation.READ\_COMMITTED,//事务的隔离级别,默认值采纳 DEFAULT. rollbackFor = Throwable.class, //异样回滚事务 propagation = Propagation.REQUIRED) //Propagation.new的话为事务的都在新的线程处理事务 no-rollback- for  抛出 no-rollback-for 指定的异样类型,不回滚事务。

Spring 中事务流传个性

@Transactional(propagation=Propagation.REQUIRED) 如果没有事务创立新事务, 如果以后有事务参加以后事务, Spring 默认的事务流传行为是PROPAGATION\_REQUIRED,它适宜于绝大多数的状况@Transactional(propagation=Propagation.REQUIRES\_NEW)必须是新事务, 如果有以后事务, 挂起以后事务并且开启新事务

Spring AOP异步操作实现

1.  @EnableAsync //spring容器启动时会创立线程池  @SpringBootApplication public class Application { public static void main(String\[\] args) { SpringApplication.run(Application.class, args); }}2. @在须要异步执行的业务办法上,应用@Async办法进行异步申明。即可##### 当咱们须要本人对spring框架提供的连接池进行一些繁难配置,spring: task: execution: pool: queue-capacity: 128    阻塞队列最大期待线程数 core-size: 5           外围线程数 max-size: 128          最大线程数 keep-alive: 60000      当线程闲暇时60s后执行线程销毁回收 thread-name-prefix: db-service-task-      为线程创立名字

Spring AOP中Cache操作实现

1.  @EnableCaching //spring容器启动时会主动启动cache配置缓存  @SpringBootApplication public class Application { public static void main(String\[\] args) { SpringApplication.run(Application.class, args); }}2.在须要缓存的办法上配置@Cacheable(value = "deptCache"),      cache配置姓名以便前期清理缓存3.在须要清理缓存的办法上配置@CacheEvict(value="deptCache",allEntries=true)当执行完结的清理缓存,cache姓名和清理所以缓存配置

在Spring中默认cache底层实现是一个Map对象,假如此map对象不能满足咱们理论须要,在理论我的项目中咱们能够将数据存储到第三方缓存零碎中.