Spring
Spring 是分层的JavaEE应用一站式的轻量级开源框架,以控制反转(Inverse of Control, loC)和面向切面编程(AspectOriented Programming,AOP)为内核,提供了表现层Spring MVC、持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术。
Spring Core是Spring 的核心模块,实现 loC容器(IoC/DI) ;
Spring MVC是Web模块,是表现层框架,用于简化Web开发;
Spring AoР模块,是采用预编译和运行期动态代理实现的AoP框架;
Spring JdbcTemplate 是对 jdbc轻量级封装,简化 jdbc使用。
控制反转
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责(即loC容器),这样控制权就由应用转移到外部容器,控制权的转移就是所谓的反转。
依赖注入就是对象与对象之间的依赖关系可以通过构造器注入、方法注入和接口注入的方式实现。
但Spring 的依赖注入不支持接口注入。通过依赖注入和控制反转(loC/DI)的作用是降低了对象与对象之间的依赖程度,提高了应用程序的性能和灵活性。
AOP
AOP (Aspect Oriented Programming 的缩写,翻译为面向方面或面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
AOP是OOP的延续和有益补充,也是Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。
利用AOP编程可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低(低耦合),提高程序的可重用性,同时提高开发的效率。
Spring AoP应用场景有日志记录、性能统计、安全控制、事务处理、异常处理、其他功能。
代理模式
1.代理模式是为目标对象创建代理对象以提供一种代理机制,让代理对象能控制目标对象的访问,并且可以在不改变目标对象的情况下为目标对象添加额外的功能。
2.代理模式类图是需要定义代理接口、目标类和代理类,目标类和代理类实现代理接口,同时代理类与目标类有依赖关系。实现代理模式有两种方式:静态代理和动态代理。
3.代理模式的优点有
- 代理模式在客户对象和目标对象之间起到一个中介作用和保护目标对象的作用
- 代理对象可以扩展目标对象的功能
- 代理模式能将客户对象与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性。
4.代理模式的缺点有
- 代理模式会造成系统设计中的类数量增加
- 在客户对象和目标对象之间增加一个代理对象,会造成请求处理速度变慢
- 在一定程度增加了系统的复杂度
5.常见代理模式的应用场景有远程代理、虚拟代理、安全代理、智能指针、延迟加载等。
悲观锁
悲观锁就是某个事务在更新数据过程中将数据锁定,其他任何事务都不能读取或修改,必须修改完成后才能访问数据。
悲观锁的实现是利用数据库的锁机制,只需要在SQL语句后加上for update即可开启悲观锁。
悲观锁的特点具有排他性,应用场景一般适用于短事务处理。
悲观锁的
优点是可以保障数据库的数据是绝对安全的,它是依赖数据库的锁机制,能很好的解决数据库访问的并发性问题。
缺点是会导致数据库访问性能低下,所以适合短事務(事务执行时间很短)的情况.
使用场景是对数据安全性要求非常高的场景,比如银行系统、金融系统等。
乐观锁
乐观锁并不是一种数据库锁机制,而是一种冲突检测机制(版本冲突检测机制和时间戳冲突检测
机制),它的特点就是并发性较好,事务修改数据时,其他事务仍可以修改数据。乐观锁的
- 优点是可以保障并发性比较好(也就是数据库访问性能不错),因为它是一种软件的冲突检测机制, 并不依赖于数
据库的锁机制。- 缺点是并没彻底解决数据库访问的并发性问题,所以数据库的数据不是绝对安全的。
- 使用场景是对数据安全性要求不高而对性能要求很高的场景,比如各种信息管理系统等。