Spring总结

Spring是javaEE编程领域的一款轻量级框架。是一个分层的、面向切面的java应用程序的一站式轻量级解决方案。

Spring有两大核心,IOC和AOP

IOC就是控制反转,通常我们在项目中需要手动new去创建对象,这种方式不利于对对象的管理。这种把创建对象的过程交给spring容器进行管理。

AOP就是面向切面编程,经常用来封装多个类的公共行为,减少系统代码的耦合性。还可以用于解决一些系统层面的问题,我实际项目中使用AOP实现过日志、权限、自定义注解等。

Spring的IOC有两大核心,源码里边有接口beanFactory和applicationContext,beanFactory是通过工厂模式来生产bean,默认生产的是单例bean。applicationContext是beanFactory的子接口,强了BeanFactory的功能。通常我们都是使用applicationContext,其中ClassPathXmlApplicationContext来初始化IOC容器。

AOP通过设置切面,当切面设置的目标类的方法被调用时,aop框架会拦截此次调用,我看过pointCut类的源码,里面有两个核心性,ClassFilter 类过滤器,MethodMatcher 方法匹配器,所以aop来可以进行拦截.拦截之后,aop机制会通过jdk或cglib帮咱们生成动态代理对象,调用增强类的增强方法,进行功能织入。

动态代理的两种方式和区别?
JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。
CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。

区别:JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理final修饰的类。