赞
踩
本文将持续更新,主要讲解SSM框架的底层原理和实现机制等
IOC即Inverse of Control,它包括两个内容:控制与反转
那到底什么东西的“控制”被“反转”了呢?对于软件而言,即是某一个接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。
因为IOC确实不够开门见山,因此业界曾经进行了广泛的讨论,最终软件界的泰斗级人物Martin Fowler提出了DI(依赖注入:Dependency Injection)的概念用以代替IOC
即让调用类对某一个接口的依赖关系由第三方(容器或者协作类)注入,以移除调用类对某一个接口实现类的依赖。
AOP是Aspect Oritened Programming的简称,普遍翻译成 面向切面编程。
按照软件重构思想的理念,如果多个类中出现相同的代码,应该考虑定义一个共同的抽象类,将这些相同的代码提取到抽象类中。
比如,Horse、Pig、Camel这些对象都有run、eat方法,通过引入一个包含这两个方法抽象的Animal父类,Horse、Pig、Camel就可以通过继承Animal复用run和eat方法。
通过引入父类消除多个类中重复代码的方式在大多情况下是可行的,但世界并非永远这么简单。
举个事务管理的栗子,看下面代码
Connection conn ;try{conn = DriverManager.getConnection();①获取数据连接conn.setAutoCommit(false); ②关闭自动提交的机制conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); ③设置事务隔离级别Statement stmt = conn.createStatement();int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+"WHERE user_id = 1");conn.commit();④提交事务}catch(Exception e){…conn.rollback();⑤提交事务}finally{…}
在上面的代码中,真正的业务逻辑就只有
int rows = stmt.executeUpdate( "INSERT INTO t_topic VALUES(1,’tom’) " );rows = stmt.executeUpdate( "UPDATE t_user set topic_nums = topic_nums +1 "+"WHERE user_id = 1");
AOP独辟蹊径通过横向抽取机制为这类无法通过纵向继承体系进行抽象的重复性代码提供了解决方案。
Spring AOP使用动态代理技术在运行期织入增强的代码。
之所以需要两种代理机制,很大程度上市因为JDK本身只提供接口的代理,而不支持类的代理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。