zoukankan      html  css  js  c++  java
  • spring框架基础

      浅谈spring基础

    1.spring的作用
    我们在使用hibernate进行或别的控制层框架进行编程时,它们都对应了OOP的思想,都是一种纵向
    的编程过程,它们在运行时下一步的执行都严重依赖于上一步的成功执行后,相互之间的偶合性
    太大。而spring就是专门为了解除它们的偶合性的。
    2.spring思想
    1.IOC (inversion of control) 控制反转
    主要用于管理对象
    由主动创建对象变成被动等待对象创建的过程
    简单来讲就好比是,领导想出去旅游,会跟秘书讲.我什么时候要去哪哪玩一下.而不会说:
    我什么时候要去哪哪玩一下,坐飞机还是火车,要住什么旅馆,每天吃什么东西.这些都会
    交给秘书去安排.而等到旅游景区后,自然会有车来接到酒店,吃住玩都已经被秘书安排妥当了.
    这就是控制反转,把权力交给秘书,领导只负责玩.在这其中,秘书就相当于框架里的BeanFactor
    ,负责到达地点之后的所有行程。而整个景区就是框架里的JavaBean.
    传统模式就好比是,普通人出去旅游,要先在网上找好旅馆,然后打电话预定,等到旅游结束
    后再到前台把房间退掉。再这个过程中,网络就是查询上下文的Context,它其中的一个职能
    就是帮人找旅馆。就是lookup()方法,网络上所有的酒店目录就是JNDI
    (java Naming Directory Interface java命名和目录接口),酒店是EJB(Enterprise Java
    Bean 它是Java应用程序服务器定义下的服务器端组件模型,同时是一个不依赖供应商的
    编程接口。简单来讲就是一个主要应用于企业的类,主要把整个商业化流程抽象化实现)
    网络是EJB的容器。
    区别:
    普通人出去旅游比较麻烦,不但要自己找旅馆,旅游结束后还得再去前台把房间退掉。而
    领导呢,他只要跟秘书说一下就OK了,把权力交到秘书手中,等到需要的时候直接注入
    就可以了。DI(Dependency Injection)

    2.AOP (aspect Oriented Prigramming) 面向切面编程
    1.AOP 作用
    AOP可以说是OOP的补充和完善.OOP有封装,继承,多态等概念来建立一种对象层次结构,用以模拟
    公共行为的一个集合.当我们需要为分散的对象引入一个公共的行为(如:日志,安全,事务)的
    时候,OOP往往会显得力不从心。也就是说OOP允许你定义从上到下的关系,但不适合从左到右的
    关系,比如日志。日志往往是水平的散步在所有对象的层次中,而与它所散步到的对象的核心
    功能毫无关系。这种散步在各处的无关代码被称为横切代码。如果想要在OOP中实现,势必会产
    生大量的重复代码,提升模块间的耦合度,不利于代码的复用。
    但是AOP正好解决了这些不利因素,它利用"横切"的技术,切开封装对象的内部,把那些影响到多
    个类的公共行为全部封装到一个可重复使用的类里,即切面(Aspect)。简单来讲:就是把那些与
    业务无关,却为业务模块共同调用的逻辑或责任封装起来,便于减少代码间的重复性,降低模块
    间的耦合度,减少了后期操作和维护的难度。AOP代表的是横向关系,加入对象是一根柱子,里面
    有属性和方法,那么AOP所做的就是切开这根柱子,得到里面的信息并加入新的信息,最后再把柱子
    粘合起来。
    当使用横切技术时,AOP把软件分成两个部分,核心业务逻辑和横向切入点。
    好处:
    1.切入点集中在一块,不会产生大量重复的代码;
    2.核心模块关注核心功能的代码,降低模块间的耦合度。
    2.AOP 实现原理
    AOP其实是由目标类的代理类实现的,代理分为静态代理和动态代理两类。其中,静态代理有继
    承和实现接口两种方法,它们大体都是子类实现重写或重构父类方法,在重写或重构中加入需要
    的功能,最后回调对象方法。但是静态代理因为实现起来太过繁琐而被舍弃了。
    动态代理:它其实是AOP框架动态生成的一个对象,该对象可以作为目标对象使用。动态代理包括
    了目标对象的所有方法,但是由于动态代理中的方法和目标对象中的方法存在差异,所以使用动态
    代理时只在特定的切入点增加方法,然后回调目标对象的方法。

    AOP是spring中很重要的一个功能, 我会在下一篇里面详解一下,希望大家多多关注,谢谢。

  • 相关阅读:
    .NET中string和StringBuilder的区别
    Hashtable 类
    C#中null和""的区别
    Dictionary 泛型类
    宿主进程含义
    事件和委托
    关于SQLServer中索引使用及维护简介
    什么是序列化
    “锁定”语句(C# 参考)
    栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]
  • 原文地址:https://www.cnblogs.com/zhuangfei/p/7158920.html
Copyright © 2011-2022 走看看