首先让我们来了解下spring是一个什么玩意
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
然后这个框架主要有些什么东西
- Core:最重要的核心组件,提供IOC功能
- Context:上下文组件,提供包的扫描
- Bean: JavaBean的管理
- SpEL: Spring表达式
- Aop: 面向切面编程
- JDBC:集成JDBC开发
在这个框架里面最重要的就是IOC和AOP
首先来说说IOC
- IOC是一种设计思想,简单来讲就是控制反转
- 控制就是将创建Bean的创建权交给IOC来管理
- 反转就是IOC创建好后再给开发者
- 这样做的好处就是解耦,利于以后的维护
然后来说说AOP
- AOP简称面向切面编程,它是OOP(面向对象编程)的一种延续
- 为什么有AOP呢,因为我们在做一个项目的时候,会创建很多很多的类,而这些类相互之间没啥关系,但是他们中有些相同的方法确写了好几遍,所以当我们每创建一个类的时候都要写这些方法就很麻烦,所以AOP就来了,它创建一个公共类,将这些相同的方法都放到里面,这样其他的类要用的话直接调用就行了
- 这样做的好处就是让每个类都只关心自己的核心业务,而不用关注公共业务,不仅减轻了代码负担,还达到了解耦的目的
说道AOP就必须来谈谈代理模式
- 首先代理模式就是给对象提供一个代理对象,然后通过代理对象对一些业务做出处理,从而解放被代理对象,让被代理对象只注重自己的业务
- 打个比方,手机工厂会生产手机,但我们一般不会直接去原厂购买,而是去实体店购买,为什么?因为手机厂位置固定,不方便,而且手机产光生产手机这一个业务就够累了如果他们还要给自己打广告,搞售后,还要给客户介绍它们就忙不过来,所以这时候代理商出来了
- 而代理模式的话主要分为静态代理和动态代理
- AOP采用的是动态代理,所以我们主要讲讲动态代理
动态代理
- java的动态代理主要分为JDK动态代理和CGLIB动态代理
- JDK动态代理是JDK自带的,使用前提是必须实现过InvocationHandler接口,然后再实现invoke方法,然后再通过Proxy.newProxyInstence返回代理对象
- 而CGLIB动态代理则要引入CGLIB依赖,并且通过反射加继承机制动态生成代理类的子类