控制反转和依赖注入(IOC)spring
Spring的IOC就是当调用者要使用被调用者时,spring容器会建立被调用者实例,无需调用者自行建立,而后进行依赖注入(@Autowired)编程
面向切面编程(AOP)spa
面向切面老是和面向对象编程(OOP)作比较的。面向切面(AOP)拦截是到方法级别的,面向对象编程拦截是到对象级别的。当咱们须要给分散的对象引入公共行为时候,通常采用切面思想,例如日志、例如统一异常返回。能够用@Aspect注解定义为类切面。@Pointcut注解定义切面须要切入的切点。写起来格式就是("execution(com.hikvision.product.controller)”)代理
动态代理和静态代理日志
静态代理:对象
一个实现类要被调用时,能够先经过代理类管理委托类,客户端直接调用代理类就好了。接口
优势:get
缺点:it
动态代理:io
动态代理是经过反射机制实现,最核心的接口是InvocationHandler和Proxy类
invocationHasndler接口的核心入参主要是Object proxy(被代理对象)、Method(被调用方法)、Object[] arg(调用方法入参)
Proxy类的核心入参主要是ClassLoader(类加载器)、interface(获得所有接口)、invocationHandler接口的子类实例
JDK动态代理只能必须代理接口(不支持抽象类),代理类都须要实现InvocationHandler接口,而且实现invoke方法
客户端调用时直接经过代理类logHandler.newProxyInstance(new targetObject)
JDK动态代理的代理对象在建立时,须要使用业务实现类所实现的接口做为参数(由于在后面代理方法时须要根据接口内的方法名进行调用)。若是业务实现类是没有实现接口而是直接定义业务方法的话,就没法使用JDK动态代理了。而且,若是业务实现类中新增了接口中没有的方法,这些方法是没法被代理的(由于没法被调用)