初步认识Spring
Posted 小文学编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初步认识Spring相关的知识,希望对你有一定的参考价值。
基本认识
Spring 立志于全方面的简化Java开发:
1、基于POJO 的轻量级 和最小侵入性编程
2、通过依赖注入和面向接口松耦合
3、基于切面和惯性进行声明式编程
4、通过切面和模板减少样式代码
通过Bean(BOP)、依赖注入(DI)、面向切面(AOP)三种方式来实现上述目标
Spring 是面向Bean的编程,Bean在Spring 中才是真正的主角
Spring提供了IOC容器通过配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转
控制反转(其中最常见的实现方式就是依赖注入(DI)),基本概念:不创建对象,但是描述创建他们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要那一项服务。容器(在Spring 框架中是IOC容器)负责将这些联系在一起。
在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将他们连接在一起,决定什么时间调用什么方法。
Spring 设计的核心 org.springframework.beans 包(架构核心:org.springframework.core 包),它设计的目标是 与JavaBean 组件一起使用,这个包通常不是由用户直接使用,而是由服务器将其用作其他多数功能的底层中介。
最高级抽象是BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。
BeanFactory 最底层支持两个对象模型:
1、单例:提供了具有特定名称的全局共享实例对象,可以在查询时对其进行检索。Singleton是默认的也是最常用的对象模型
2、原型:确保每次检索都会创建单独的实例对象,在每个用户都需要自己的对象时,采用原型模式。Bean工厂的概念是Spring 作为IOC 容器的基础。IOC则将处理事情的责任从应用程序代码转移到框架。
AOP 编程理念
面向切面编程,即AOP,是一种编程思想,它允许程序员对横切关注点或者横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP的核心构造是方面(切面),它将那些影响多个类的行为封装到可重用的模块中。
AOP和IOC是补充性的技术,他们都运用模块化的方式解决企业应用程序开发中的复杂问题。在典型的 面向对象开发方式中,可能要将日志记录语句放在所有方法和Java类中才能实现日志功能能。在AOP方式中,可以反过来将日志服务模块化,并以声明的方式将他们应用到需要日志的组件上。当然,优势就是java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用Spring AOP 编写的应用程序代码是松耦合的
AOP的功能完全继承了Spring事务管理、日志和其他各种特性的上下文
AOP编程的常用场景有:Authentication(权限认证)、Auto Caching(自动缓存处理)、Error Handling(统一错误处理)、Debugging(调试信息输出)、Logging(日志记录)、Transactions(事务处理)
Spring 5 系统架构
Spirng的组件被分别整合在核心容器(Core Container)、AOP(Aspect Oriented Programming)和设备支持(Instrmentation)、数据访问及集成(Data Access/Integergration)、Web、报文发送(Messaging)、Test 6个模块集合汇总
组成Spring 框架的每个模块集合或者模块都可以单独存在,也可以一个或者多个模块联合实现。
核心容器
由Spring-Beans、Spring-core、Spring-context、Spring-expression(Spring Expression Language,SpEL)4个模块组成
Spring-core 和 Spring-beans 模块是Spring 框架的核心模块,包含了控制反转(Inversion of Contorl ,IOC)和依赖注入(DI)。BeanFactory 接口是Spring 框架中的核心接口,它是工厂模式的具体实现。BeanFactory 使用控制反转对应用程序的配置和依赖性规范与实际的应用代码进行分离。但是BeanFactory 容器实例化后并不会自动实例化Bean,只有当Bean 被使用时,BeanFactory 容器才会对接Bean 进行实例化与依赖关系的装配。
spring-context 模块架构于核心模块上,它扩展了BeanFactory,为他添加了Bean生命周期控制,框架时间体系以及资源加载透明化等功能。此外模块还提供了许多企业级服务,例如:邮件访问,远程访问,任务调度等。ApplicationContext 是该模块的核心接口,它的超类是BeanFactory,与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例Bean进行实例化与依赖关系的装配,使得它处于待用状态。
spring-context-support 模块是对Spring IOC 容器的扩展支持,以及IOC子容器
spring-context-indexer 模块是Spring 的类管理组件和Classpath扫描。
spring-expression 模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统的EL,但是提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于Spring 产品的需求而设计,他可以非常方便地桶Spring IOC进行交互。
AOP和设备支持
有spring-aop、spring-aspects、spring-instrument 3个模块组成
spring-aop 是spring 的另一个核心模块,是AOP主要的实现模块,作为OOP后,对程序员影响最大的编程思想之一,AOP极大地开拓了人们对于编程的思路。在Spring 中,它是以JVM的动态代理技术为基础,然后设计出了一系列的AOP横切实现,比如前置通知,返回通知,异常通知等,同时PointCut 接口来匹配切入点,可以使用现有的切入点来设计横切面,也可以扩展相关方法根据需要进行切入。
spring-aspects 模块集成自 AspectJ 框架,主要是为 Spring AOP 提供多种AOP实现方法。
spring-instrument 模块基于JAVA SE 中的 “java.lang.instrument” 进行设计的,应该算是AOP的一个志愿模块,主要作用是在JVM启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现AOP的功能。
数据访问与集成
由spring-jdbc、spring-tx、spring-orm、spring-jms、spring-orm 5个模块组成。
spring-jdbc 模块是spring 提供的JDBC抽象框架的主要实现模式,用于简化Spring JDBC操作。主要是提供JDBC模板方式、关系数据库对象话方式、SimpleJdbc方式、事务管理来简化JDBC编程。主要实现类是JdbcTemplate、SimpleJdbcTemplate、NamedParameterJdbcTemplate
spirng-tx 模块是Spring JDBC 事务控制实现模块。使用Spring 框架,他对事务做了很好的封装,通过它的AOP配置,可以灵活的配置在任何一层,但是在很多的需求和应用,直接使用JDBC事务控制还是有其优势的。其实,事务是以业务逻辑为基础的。一个完成的业务应该对业务层里的一个方法;如果业务操作失败,则整个事务进行回滚;所以,事务可控制是绝对应该放在业务层里的,但是持久层的设计则应该遵循一个很重要的原则:保证操作的原子性,即持久层里的每个方法都应该是不可以分割的,所以在使用Spring JDBC 事务控制时,应该注意其特殊性。
spring-orm 模块是ORM框架支持模块,主要集成Hibernate、Java Persistence API(JPA)和Java Data Ojbects(JDO)用于资源管理、数据访问对象(DAO)的实现和事务策略
spring-oxm 模块主要提供一个抽象层以支撑OXM(OXM 是Object-to-XML-Mapping的缩写,它是一个O/M-mapper,将java对象映射成 XML数据,或者将XML数据映射成java对象)例如:JAXB、Castor、XMLBeans、、JiBX、XStrean等
spring-jms 模块 能够发送和接收消息,子Spring-framework 4.1 以后,还提供了对spring-messaging的模块的支持。
WEB 组件
有spring-web、spring-webmvc、spring-websocket 和spring-webflux 4个模块组成,
spring-web 模块为 Spring 提供了最基础web支持,主要建立于核心容器之上,通过Servlet 或者listeners 来初始化IOC容器,也包含一些web相关的支持。
spring-webmvc 模块众所周知 是一个web-servlet模块,实现了spring MVC 的web 应用
spring-websocket 模块主要是与web前端的全双工通讯的协议。
spring-webflux 是一个新的非堵塞函数式Reactive Web 框架,可以用来建立异步的,非阻塞,时间驱动的服务,并且扩展性非常好
通信报文
spring-messaging 模块,是从spring 4 开始新加入的一个模块,主要职责是Spring 框架集成一些基础的报文传送应用。
集成测试
spring-test 模块,主要为测试提供支持的,毕竟在不需要发布到你的应用服务器或者链接到其他企业设施的情况下能够执行一些集成测试或者其他测试对于任何企业都是非常重要的。
各个模块之间的依赖关系
从今天开始,将持续更新spring的相关内容,敬请期待!!!
以上是关于初步认识Spring的主要内容,如果未能解决你的问题,请参考以下文章