EJB的学习成本很高,开发效率却不高,需要编写很多重复的代码,这些问题阻止了EJB的继续发展。就在EJB技术止步不前的时候,Spring框架在合适的时机出现了,Spring框架和EJB不同,Spring框架的学习成本非常低,它是一个轻量级的开发框架,更多强调面向对象的设计,而不是让现有的技术变得更复杂,它使用JavaBean替代了复杂的EJB,并且为JavaBean提供了简单易用的应用配置框架。
一个JavaBean就是一个公共类,它可以被其它JavaBean类作为组件来使用,并且JavaBea之间的组配不需要在代码级实现,完全可以在配置层和注解层实现,Spring会自动选择相适配的JavaBean来组配运行。这种自动适配机制避免了JavaBean与使用类之间的代码耦合,提高了程序的可扩展性和维护性。
例如类A要使用类B,类B是类A的属性,如果直接在类A中创建类B,当类B因业务需要修改时,也需要修改类A的代码,这种写法就是代码耦合,也可以说类A和类B属于代码耦合。
假如我们把类B的创建交给Spring,Spring通过配置文件或者通过Java注解来创建类B,然后再由Spring把创建的类B实例和类A的实例组配起来,这样就避免了类A与类B的代码耦合。这种机制就是Spring框架的控制反转思想,相当于类A把创建类B权利交给了Spring,由Spring来控制类B的创建。
Spring框架还有一个比较重要的功能,那就是AOP机制。Spring框架的AOP机制可以把系统中的一些通用功能抽取出来,作为JavaBean来使用,与此同时在系统的业务流程代码中设置调用这些JavaBean功能的切入点,当系统业务流程执行到切入点时,Spring会自动把需要调用的JavaBean横向切入到业务流程指定的位置,AOP的这种技术也称为“横切”技术。
例如,在一个业务系统中,当用户要进入需要操作权限的页面时,系统会先进入登录页,要求用户登录系统后再进入该页面。这样的操作权限页面会有多个,如果为每个页面都写登录业务逻辑处理代码,显然是会造成代码冗余,维护起来也非常麻烦。比较好的做法是把用户登录业务处理作为一个独立的JavaBean,这个JavaBean也称为AOP的“切面”。然后在需要用户操作权限的业务流程页面设置“切入点”,并通过注解或配置文件将“切面”和“切入点”连接起来。当业务流程执行到“切入点”时,Spring框架会自动把与切入点关联的“切面”切入到业务流程“切入点”所在的位置,开始执行“切面”代码,直至切面代码执行完毕,然后根据“切面”返回的结果确定是否执行后面的流程。下图是用户登录功能切入到业务流程的示意图。

Spring框架还有一个最大的特征就是和现有的开发框架不是竞争关系,而是采用融合的方式将其它框架集成进来,充分利用其它框架的技术,为系统实现提供最优解决方案。SSM就是Spring框架融合了MVC框架技术和MyBatis数据库框架技术。

吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring框架的基本思想的更多相关文章

  1. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:继承的应用

    class Array{ // 表示数组 private int temp[] ; // 整型数组 private int foot ; // 定义添加位置 public Array(int len) ...

  2. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类

    interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...

  3. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:包装类

    public class WrapperDemo01{ public static void main(String args[]){ int x = 30 ; // 基本数据类型 Integer i ...

  4. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:Object类

    class Demo{ // 定义Demo类,实际上就是继承了Object类 }; public class ObjectDemo01{ public static void main(String ...

  5. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:宠物商店实例分析

    interface Pet{ // 定义宠物接口 public String getName() ; public String getColor() ; public int getAge() ; ...

  6. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:抽象类与接口的应用

    abstract class A{ // 定义抽象类A public abstract void print() ; // 定义抽象方法print() }; class B extends A { / ...

  7. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:instanceof关键字

    class A{ // 定义类A public void fun1(){ // 定义fun1()方法 System.out.println("A --> public void fun ...

  8. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:对象的多态性

    class A{ // 定义类A public void fun1(){ // 定义fun1()方法 System.out.println("A --> public void fun ...

  9. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:接口的基本实现

    interface A{ // 定义接口A public static final String AUTHOR = "李兴华" ; // 全局常量 public abstract ...

  10. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:final关键字

    final class A{ // 使用final定义类,不能有子类 }; class B extends A{ // 错误,不能被继承 }; class A{ public final void p ...

随机推荐

  1. LoadRunner回放脚本时,显示浏览器的设置

    打开LoadRunner的VuGen,选择Tools-->General Options-->Display,在Display里将 Show browser during replay打钩 ...

  2. 201706 gem 'rails-erd'生成Model关系图

    [工具]一张图理清各个model之间关系 安装 Graphviz 2.22+: 终端机中执行 brew install graphviz Gemfile中添加 gem 'rails-erd' 终端机中 ...

  3. mysql性能优化及 Comparison method violates its general contract

    项目上嵌套结果集查询,查询的列表再根据每个id进行查询计算,嵌套的sql如下: SELECT SUM(IFNULL(t.out_rate,0)) totalOutRate, SUM(IF(IFNULL ...

  4. linux网络编程之shutdown() 与 close()函数详解

    linux网络编程之shutdown() 与 close()函数详解 参考TCPIP网络编程和UNP: shutdown函数不能关闭套接字,只能关闭输入和输出流,然后发送EOF,假设套接字为A,那么这 ...

  5. Concurrent包下用过哪些类?

    1.executor接口,使用executor接口的子接口ExecutorService用来创建线程池2.Lock接口下的ReentrantLock类,实现同步,比如三个线程循环打印ABCABCABC ...

  6. /etc/fstab 只读无法修改的解决办法

    在做saltstack的时候不小心误把/etc/fstab给注释了 在命令补全的时候开始报错:[root@kafka2 ~]# cat /et-bash: cannot create temp fil ...

  7. Dive into re Module in Python

    Dive into RE in Python Standard re module in python is powerful to handle text manipulation,such as ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-heart

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  9. php5.3不支持 ereg、ereg_replace等函数问题

    在php5.3环境下运行oscommerce,常常会出现Deprecated: Function ereg() is deprecated in...和Deprecated: Function ere ...

  10. C++ Winsock

    由于兼容的问题更新下winsock,有较好的移植性:客户端是非阻塞的,服务器是阻塞的! Win32控制台: 数据收发: 服务器向客户端发送一个txt文本内容和一个结构体数据: 服务器代码: #incl ...