重难点剖析

AOP 是什么,解决了什么问题,利用场景?

是什么?

AOP:面向切面编程,可能在不扭转原有代码的状况下对代码的性能进行加强。

解决了什么问题?

AOP 次要用来解决:在不扭转原有业务逻辑的状况下,加强横切逻辑代码,基本上解耦合,防止横切逻辑代码反复。
可能解决代码的臃肿问题,进步代码的可维护性

利用场景?

次要利用于:日志记录,事务管制,性能统计,安全控制,异样解决等。

AOP 编程根本步骤及实现过程(以基于AspectJ框架实现为例)。

1.增加依赖

<dependency>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-starter-aop</artifactId></dependency>

2.创立日志切面类对象(以日志为例)

package com.cy.pj.common.aspect;@Aspect//示意此类对象为一个切面@Slf4j@Component//将此类交给spring治理public class SysLogAspect {         @Pointcut("bean(sysUserServiceImpl)")//切入点         public void logPointCut() {}         @Around("logPointCut()")//盘绕告诉,示意此办法在外围业务执行之前和之后执行         public Object around(ProceedingJoinPoint jp)         throws Throwable{                 try {                   log.info("start:{}"+System.currentTimeMillis());                   Object result=jp.proceed();//最终会调用指标办法                   log.info("after:{}"+System.currentTimeMillis());                   return result;                 }catch(Throwable e) {                   log.error("after:{}",e.getMessage());                   throw e;                 }         }}

3.测试

@SpringBootTestpublic class AopTests {         @Autowired         private SysUserService userService;         @Test         public void testSysUserService() {   PageObject<SysUserDeptVo>po=userService.findPageObjects("admin",1);          System.out.println("rowCount:"+po.getRowCount());         }}

AOP 编程中的外围对象及利用关系。

Aspect:切面,由一系列切点、加强和引入组成的模块对象,可定义优先级,从而影响加强和引入的执行程序。事务管理(Transaction management)在java企业应用中就是一个很好的切面样例。

Join point:接入点,程序执行期的一个点,例如办法执行、类初始化、异样解决。 在Spring AOP中,接入点始终示意办法执行。

Advice:加强,切面在特定接入点的执行动作,包含 “around,” “before” and "after"等多种类型。蕴含Spring在内的许多AOP框架,通常会应用拦截器来实现加强,围绕着接入点保护着一个拦截器链。

Pointcut:切点,用来匹配特定接入点的谓词(表达式),加强将会与切点表达式产生关联,并运行在任何切点匹配到的接入点上。通过切点表达式匹配接入点是AOP的外围,Spring默认应用AspectJ的切点表达式。

Introduction:引入,为某个type申明额定的办法和字段。Spring AOP容许你引入任何接口以及它的默认实现到被加强对象上。
Target object:指标对象,被一个或多个切面加强的对象。也叫作被加强对象。既然Spring AOP应用运行时代理(runtime proxies),那么指标对象就总是代理对象。

AOP proxy:AOP代理,为了实现切面性能一个对象会被AOP框架创立进去。在Spring框架中AOP代理的默认形式是:有接口,就应用基于接口的JDK动静代理,否则应用基于类的CGLIB动静代理。然而咱们能够通过设置proxy-target-class="true",齐全应用CGLIB动静代理。

Weaving:织入,将一个或多个切面与类或对象链接在一起创立一个被加强对象。织入能产生在编译时 (compile time )(应用AspectJ编译器),加载时(load time),或运行时(runtime) 。Spring AOP默认就是运行时织入,能够通过枚举AdviceMode来设置。

AOP 思维在Spring中的实现原理剖析。
AOP 编程中基于注解形式的配置实现。(@Aspect,@PointCut,@Around,...)
AOP 编程中基于注解形式的事务管制。(@Transactional)
AOP 编程中异步操作的实现?(@EnableAsync,@Async)
AOP 编程中的缓存利用?(@EnableCaching,@Cacheable,@CacheEvict)

FAQ剖析

什么是OCP准则(开闭准则)?
什么是DIP准则 (依赖倒置)?
什么是繁多职责准则(SRP)?
Spring 中AOP的有哪些配置形式?(XML,注解)
Spring 中AOP 的告诉有哪些根本类型?(5种)
Spring 中AOP是如何为Bean对象创立代理对象的?(JDK,CGLIB)
Spring 中AOP切面的执行程序如何指定?(@Order)
Spring 单体架构我的项目中事务的管制要通过Connection对象实现,?
Spring 如何保障一个线程一个Connection对象?借助ThreadLocal实现.?
多个事务并发执行时可能会呈现什么问题?(脏读,不可反复读,幻影读)
理解事务的隔离级别吗?晓得具体的利用场景吗?