Spring是什么?
Spring提供了很多轻量级应用开发实践的工具集合,这些工具集以接口、抽象类、或工具类的形式存在于Spring中。通过使用这些工具集,可以实现应用程序与各种开源技术及框架间的友好整合。比如有关jdbc封装的数据访问工具Spring
JDBC,有关编写单元测试的spring test包以及spring-mock,有关访问动态脚本语言的Spring
Script,另外还有发送邮件的工具Spring Mail、日程及任务处理工具Spring scheduling等。
可以这么说,大多数企业级应用开发中经常涉及到的一些通用的问题,都可以通过Spring提供的一些实用工具包轻松解决
这是Spring架构包括的6大模块:
Spring的优点有哪些?
- 方便解耦,简化开发 (高内聚低耦合) Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean - AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
- 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持 - 声明式事务的支持 只需要通过配置就可以完成对事务的管理,而无需手动编程
- 方便程序的测试 Spring对Junit4支持,可以通过注解方便的测试Spring程序
Spirng中的两个核心概念:IOC和AOP
控制反转IOC(Inversion of Control)
- ioc,控制反转,这个指的就是我们获取对象的方式进行反转了,改变了。在使用spring之前是需要手动new出来的,是我们主动获取的。使用spring之后,是将这个获取的过程交给spring来管理,我们只需要告诉spring你需要什么就行了,它就会把东西给你。
这是ioc的一个基本流程图
面向切面编程AOP(aspect-oriented programming)
- AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在版一段程序之前或者之后做一些事。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。
不过AOP和IOC并不是spring中特有的,只是spring把他们应权用的更灵活方便 - AOP底层用的代理模式,默认目标类实现了接口用jdk的动态代理,动态代理用的是反射,没有实现接口用cglib写字节码文件,cglib用的是asm,ioc用的是工厂模式,顶级类是beanfactory,常用类是它的子类applicationcontext的实现类,支持国际化,aop的作用是抽取通用业务逻辑,使代码解耦合,增加可理解性,可扩展性,ioc的作用是使改变类变得容易,内存管理
这是aop的一个基本流程图
在运行的情况下,这俩个圈一个是IOC,一个是Aop的应用