SpringIOC&AOP

IOC

IOC是指Spring框架中的一个模块叫做IOC容器。
IOC又叫控制反转。

指的是将对象的依赖关系交给IOC容器来管理,并且由IOC容器完成对象的注入。

这样可以大大简化开发的效率,并且把应用从复杂的依赖关系中解放出来。

IOC容器就像一个工厂,只要我们写好配置文件或者注解,我们就可以在我们想要的地方随时引用对象。

Spring时期,我们通常使用XML配置文件来配置Bean。
Spring Boot流行后,主要通过注解来配置Bean。

举例:如果你想写一个Service的话,有很多基础的类,每次调用时候都需要初始化,而有了IOC你只需要在你想要用的地方引用即可。

在这里插入图片描述
如何配置容器:
1.基于XML配置
2.基于注解的方式
3.基于JavaConfig的方式

AOP

AOP(Aspect-Oriented Programing)面向切面编程,能够将哪些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring AOP的实现对于接口来说使用JDK的动态代理实现的,对于类来说使用Cglib来实现。

在这里插入图片描述
JDK动态代理:
JDK的动态代理,就是在程序运行过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。代理的目的是调用目标方法时可以转而执行InvocationHandler的invoke方法,Spring AOP也是在这里组文章,这是典型的代理模式。

为什么JDK动态代理必须基于接口呢而不是继承呢?

  1. 因为通过JDK动态代理生成的代理类继承了Proxy,由于Java是单继承,只能通过实现接口来实现。
  2. 从代理模式的设计来说,充分利用了Java的多态特性,也符合基于接口编码的规范。

Cglib代理
使用字节码处理框架ASM,来转换字节码并生成新的类。

Cglib(Code Generlize Library)代理是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的所有方法,所以该类或方法不能声明为final。

区别:
1.Cglig是直接转换成字节码来生成新的类,所以速度更快
2.Cglib既可以实现接口的代理也可以实现类的代理
3.JDK只能实现接口实现代理
4.JDK是自带的代理模式,兼容性更好。

Spring AOP和AspectJ AOP有什么区别

  1. Spring AOP属于运行时增强,而AspectJ是编译时增强。
  2. Spring AOP基于代理(Proxying)、而AspectJ基于字节码操作。

Spring AOP已经集成了AspectJ,AspectJ应该算Java生态系统中最完整的AOP框架,AspectJ相比于Spring AOP功能更加强大,打死你Spring AOP来说更加简单。

如果切面比较少,那么两者性能差异不大,但是当切面太多,最好选择AspectJ,它比Spring AOP快很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值