Spring框架的学习笔记

最近学习了spring框架,也看了一些关于spring的博客,然后总结一些我学习和看到的一些东西。
spring是一个开放源代码的设计层面框架,主要解决了业务逻辑和其他层面的耦合度过高的问题。面向接口编程的思想贯穿了整个框架。
   它的主要特点是:
   1.它简化了我们的开发,方便了解耦。
   2.支持Aop编程,方便了我们面向切面的编程。
   3.支持了声明式的事务。是我们的事务管理更加的方便,提高了我们的开发的效率。
   3.降低了Java EE API 的使用难度。
   4.方便我们集成其他优秀的框架。
提到spring ,就会想到spring的两个核心的功能: Ioc 和Aop。那么理解了Ioc和Aop可以帮我们更好的理解spring.
  Ioc是是控制反转的意思,和它在一起往往还要一个叫DI(依赖注入)的名词。Ioc指的是降低对象之间的耦合度的一种设计思想。DI是指我们创建某个对象的时候,,同时给其注入它依赖的属性。
  Ioc不是什么技术,它是一种设计思想。它表示将你设计好的对象交给容器来控制,而不是传统设计那样交与对象内部控制。
  理解Ioc的关键在于理解它的控制反转的含义,即谁控制了谁,控制了什么?什么是反转?哪些方面反转了?
  1.谁控制谁,控制了什么? 
     传统的Java代码是在对象内部主动的去new对象,是程序主动的创建对象,而在spring框架中是有一个容器去管理和创建对象。Ioc控制对象的创建。即Ioc容器控制了对象,控制了外部资源的获取。
     2.什么是反转,反转了什么?
     传统的应用程序是主动的在对象内部来获取依赖对象,这是正转。而框架中是通过容器来创建依赖对象。这是被动的,为反转。即依赖对象的获取被反转了。
     Ioc的作用?
     Ioc对我们的程序的影响不是在代码上,而是在思想上发生了主从换位的变化。这种变化是很巨大的。即应用程序本来是老大,想要什么对象直接new便是了,但是在ioc中应用程序变成了从位,他要的对象,只能是等待Ioc容器创建,被动的接收这样的依赖资源。
       有了ioc容器之后,我们把对象的创建和控制的权力交给了容器,由容器进行组合对象的注入,对象之间耦合度降低,对象之间更将松散,这样便于我们的测试和管理。也便于我们的复用,是我们程序的灵活性变的很高。
       Ioc和DI
       DI是指的是依赖注入。其作用是提高组件重用的频率,提高程序的灵活性和可扩展性。通过这样的机制,我们无需代码只要简单的配置就可以指定目标想要的资源,我们可以注重自己业务逻辑的完成,而不要关心资源的来源,和在何处实现。
       我们的程序开始依赖于Ioc容器,他需要对象所需要的外部资源,由我们的容器注入。IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。
       总结:Ioc是一种思想,它从思想上改变了我们的应用程序,把对象的创建,赋值,管理的权力交给了代码之外的容器来实现。不再想要我们开发人员来创建,我们使用Ioc的主要目的是,减少对代码的改动来实现不同的功能。让我们的应用程序变的灵活和可扩展。实现了业务逻辑对象之间的解耦合。它的技术实现为DI技术,底层使用的反射(动态的获取类的内容即动态调取对象的机制)机制。
       ===========================================================================================================================================================================================
       Aop,是面切面编程。是基于动态代理的,它是动态代理的一种规范。它把动态代理实现的步骤和方法定义好了。Aop主要是处理一些横切性的问题,这些问题不会影响我们的业务逻辑,但是会散乱的分布在我们的代码中,不方便管理,Aop就是来处理这些问题的。Aop将我们的业务逻辑和这些问题所分离,让代码更加专注业务逻辑单元。达到一种解耦合的作用。
       Spring中包含的动态代理实现Aop的代理有两种:JDK代理(接口),Cglib代理(可继承的类)。Spring会自动的判断使用哪种代理模式。
       Aop的使用场景(为什么要使用Aop)?
       假如我们要添加一个日志的功能,我们是不是要在每个类中的每个方法中都要加入日志处理代码,这邪恶代码都是重复的,然后和主逻辑的联系也不大,影响我们代码的美观,显得十分冗余。当然这是最笨的方法,你当然可以说可以把代码写为一个方法,然后调用这个方法,这样一样的需要逐个插入,这样是强耦合度的,但我们不要这样的日志功能或者想换为别的功能的时候,还要一个个改。
     但是我们通过动态代理,可以在指定位置执行对应流程。这样就可以将一些横向的功能抽离出来形成一个独立的模块,然后在指定位置插入这些功能。这样的思想,被称为面向切面编程,亦即AOP,当我们不需要或者需要变动功能时,只要改动切面的代码即可,这样的耦合度变降低了。假如类中的一个方法便是一个点,那由方法组成的类便是一根线,由类组成的程序便是一个面,Aop便是面向这样的切面编程。
      Aop的作用和意义?
      1.Aop可以减少代码量,提高开发效率。
      2.可以在不改动源代码的前提,增加代码功能,符合开闭原则。
      3.让我们更加专注于主逻辑代码,而不是别的。
      4.耦合度降低了,是事务逻辑和非事务逻辑耦合度降低。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值