Aop 了解什么是Aop?Aop是spring框架提供的切面编程,次要作用与在不批改原有业务的时候扩大新的业务.升高程序的耦合度,加强程序的开发效率.代码失去重用性.
Aop如何实现Aop实现次要有两种形式配置中如果没有配置那么默认应用的是cglib1.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对象不能满足咱们理论须要,在理论我的项目中咱们能够将数据存储到第三方缓存零碎中.
...