怎么理解spring?

目录

1、关于控制反转 ioc

2、关于面向切面 AOP


1、关于控制反转 ioc

  • 控制反转:所谓的控制反转。通俗地讲,就是把原本需要程序员自己创建和维护的一大堆bean统统交由Spring管理。
  • 总体思想:类似于有一个具有全局视角的boss(IOC容器),减弱了之前一层一层的强依赖,降低了耦合度。不再通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面过去即可。
  • 具体如何使用:如果在程序中需要某个对象,可以使用@Autowird注解,IOC容器就会生成这个对象,然后就可以在程序中使用了。
  • 底层原理:

    IOC 本质上是一个容器,以 MAP 对 IOC 简单举例:服务器加载配置文件,由 xml 文档 解析工具读取 文件中bean 的 ID,获取到 class,使用反射创建对象,以 K-V 的形式存入 MAP,K 是 ID, V 是反射创建的对象。获取对象可以调用 context.getBean(K)的方式。


2、关于面向切面 AOP

  • 面向切面:通俗地讲,它一般被用来解决一些系统交叉业务的织入,比如日志啦、事务啥的。将相同逻辑的重复代码横向抽取出来,使用动态代理技术将这些重复代码织入到目标对象方法中,实现和原来一样的功能。

  • 底层原理:动态代理(使用动态代理实质上就是调用时拦截对象方法,对方法进行改造、增强!)

1)动态代理的两种方式:

  • jdk动态代理 --- 针对实现了接口的对象;

Spring AOP默认是使用JDK动态代理,如果代理的类没有接口则会使用CGLib代理

  • CGLib动态代理 --- 针对没实现接口的对象。

CGLib代理其生成的动态代理对象是目标类的子类

2) 那么JDK代理和CGLib代理我们该用哪个呢??

单例最好使用CGLib,多例使用jdk动态代理。因为创建性能这方面jdk更好(为啥?有接口的创建性能更好),所以需要创见多个实例的时候,jdk效果可能更好;运行性能CGLib更好(为啥?没接口的对象创建好了调用其方法更快),所以单例的情况下效果可能更好。

  • JDK在创建代理对象时的性能要高于CGLib代理,而生成代理对象的运行性能却比CGLib的低。
  • 如果是单例的代理,推荐使用CGLib

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值