资讯专栏INFORMATION COLUMN

Spring核心 Spring简介

sixgo / 2794人阅读

摘要:基于工厂,会有多种应用上下文的实现的模块在模块中,面向切面编程提供了丰富的支持,该模块是应用系统中开发切面的基础,可以帮助应用对象解耦。的主页安全对于许多应用都是一个非常关键的切面。

简化Java开发

JavaBean:Enterprise JavaBean、EJB
JDO:Java数据对象、Java Data Object
POJO:Plain Old Java Object
DI:依赖注入、Dependency Injection、DI
AOP:面向切面编程、Aspect-Orientied Programming

为了降低Java开发的复杂性,Spring采取了以下4种关键策略:

基于POJO的轻量级和最小侵入性编程

通过依赖注入和面向接口实现松耦合

基于切面和惯例进行声明式编程

通过切面和模板减少样板式代码

依赖注入 DI功能是如何实现的

依赖注入会将所依赖的关系自动交给目标对象,而不是让对象自己去获取依赖

DI的最大收益——松耦合。如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖关系就能够在对象本身毫不知情的情况下,用不同的具体实现进行替换

对依赖进行替换的一个最常用方法就是测试的时候使用mock实现

装配wiring

创建应用组件之间协作的行为通常称为装配(wiring)。Spring有多种装配bean的方式,采用XML是很常见的一种装配方式

观察它如何工作

Spring通过应用上下文(Application Context)装载bean的定义并把它们组装起来。Spring应用上下文全权负责对象的创建和组装。Spring自带了多种应用上下文的实现,它们之间主要的区别仅仅在于如何加载配置

应用切面

DI能够让相互协作的软件组件保持松散耦合,而面向切面编程允许你把遍布应用各处的功能分离出来形成可重用的组件

AOP能够使系统及服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去。这些组件会具有更高的内聚性并且会更加关注自身的业务,完全不需要了解涉及系统服务所带来复杂性。总之,AOP能够确保POJO的简单性

使用模板消除样板式代码

Spring旨在通过模板封装来消除样板式代码。Spring的JdbcTemplate使得执行数据库操作时,避免传统的JDBC样板代码成为了可能。仅仅需要关注于获取员工数据的核心逻辑,不需要迎合JDBC API需求

容纳你的Bean

在基于Spring的应用中,应用对象生存于Spring容器(container)中。Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期,从生存到死亡

Spring自带多个容器实现,可以归为两种不同的类型:

bean工厂(由org.springframework.beans.factory.BeanFactory接口定义)是最简单的容器,提供基本的DI支持。(对于大多数应用来讲bean工厂显得太低级)

应用上下文(由org.springframework.context.ApplicationContext接口定义)基于BeanFactory构建,并提供应用框架级别的服务,例如从属性文件解析文本信息以及发布应用事件给感兴趣的事件监听者

使用应用上下文

AnnotationConfigApplicationContext: 从一个或多个基于Java的配置类中加载Spring应用上下文

AnnotationConfigWebApplicationContext:从一个或多个基于Java的配置类中加载SpringWeb的应用上下文

ClassPathXmlApplicationContext:从类路径下的一或多个XML配置文件中加载上下文定义, 并把应用上下文的定义文件作为类资源

FileSystemXmlApplicationContext: 从文件系统下的一个或多个XML配置文件中加载上下文定义

XmlWebApplicationContext:从web应用下的一个或多个XML配置文件中加载上下文定义

加载一个FileSystemXmlApplicationContext:
ApplicationContext context = new FileSystemXmlApplicationContext("c:/knight.xml");

使用ClassPathXmlApplicationContext从应用的类路径下加载应用上下文:
ApplicationContext context = new ClassPathXmlApplicationContext("knight.xml");

使用AnnotationConfigApplicationContext从Java配置中加载应用上下文:
ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig,class);

bean的生命周期

Spring对bean进行实例化

Spring将值和bean的引用注入到bean对应的属性中

如果bean实现了org.springframework.beans.BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法

如果bean实现org.springframework.beans.factory.BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入

如果bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文的引用传入进来

如果bean实现了BeanPostProcessor接口,Spring将调用postProcessBeforeInitialization()方法

如果bean实现了InitializingBean接口,Spring将调用afterPropertiesSet()方法。类似地,如果bean使用init-method声明了初始化方法,该方法也会被调用

如果bean实现了BeanPostProcessor接口,Spring将调用postProcessAfterInitialization()方法

此时,bean已经准备就绪,可以被应用程序使用了,它们将一直驻留在应用上下文中,直到该应用上下文被销毁

如果bean实现了DisposableBean接口,Spring将调用distroy()接口方法。同样,如果bean使用destroy-method声明了销毁方法,该方法也会被调用

俯瞰Spring风景线 Spring模块

Spring核心容器

容器是Spring框架最核心的部分,管理着Spring应用中bean的创建、配置和管理。在该模块中,包括了Spring bean工厂,为Spring提供DI功能。基于bean工厂,会有多种Spring应用上下文的实现

Spring的AOP模块

在AOP模块中,Spring面向切面编程提供了丰富的支持,该模块是Spring应用系统中开发切面的基础,可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(事务和安全)从它们所应用的对象中解耦出来

数据访问与集成

Spring的JDBC和DAO(Data Access Object)模块抽象了JDBC编写的样板代码

ORM(Oboject-Relational Mapping)模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式。对许多留学的ORM框架进行了集成,包括Hibernate、Java Persisternce API、Java Data Object和iBATIS SQL Maps。Spring的事务管理支持所有的ORM框架以及JDBC

本模块还包括JMS(Java Message Service)之上构建的Spring抽象层,它会使用消息以异步的方式与其他应用集成;包含对象到XML映射的特性;使用Spring AOP模块为Spring应用中的对象提供事务管理服务

Web与远程调用

MVC(Model-View-Controller)模式是一种普遍被接受的构建Web应用的方法,帮助用户将界面逻辑与应用逻辑分离

Spring远程调用功能集成了RMI(Remote Method Invocation)、Hessian、Burlap、JAX-WS,同时Spring还自带了一个远程调用框架:HTTP invoker。Spring还提供了暴露和使用REST API的良好支持

Instrumentation

Spring的Instrumentation模块提供了为JVM添加代理(agent)的功能。具体来讲,它为Tomcat提供了一个织入代理,能够为Tomcat传递类文件,就像这些文件是被类加载器加载的一样

测试

Spring为使用JNDI(Java Naming and Directory Interface,Java命名和目录接口)、Servlet(Server Applet)和Portlet编写单元测试提供了一系列的mock对象实现。对于集成测试,该模块为加载
Spring应用上下文中的bean集合以及与Spring上下文中的bean进行交互提供了支持

Spring Portfolio

Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库。整个Spring Portfolio几乎为每一个领域的Java开发都提供了Spring编程模型

Spring Web Flow

Spring Web Flow建立于Spring MVC框架之上,它为基于流程的会话式Web应用(购物车或者向导功能)提供了支持。Spring Web Flow的主页(http://projects.spring.io/spr...)

Spring Web Service

虽然核心的Spring框架提供了将Spring bean以声明的方式发布为Web Service的功能,但是这些服务是基于一个具有争议性的架构(拙劣的契约后置模型)之上而构建的。这些服务的契约由bean的接口来决定。Spring Web Service提供了契约优先的Web Service模型,服务的实现都是为了满足服务的契约而编写的。
Spring Web Service的主页(http://docs.spring.io/spring-...)

Spring Security

安全对于许多应用都是一个非常关键的切面。利用Spring AOP,Spring Security为Spring应用提供了声明式的安全机制。Spring Security的主页(http://projects.spring.io/spr...)

Spring Integration

许多企业级应用都需要与其他应用进行交互。Spring Integration提供了多种通用应用集成模式的Spring声明式风格实现。Spring Integration的主页(http://projects.spring.io/spr...)

Spring Batch

当我们需要对数据进行大量操作时,没有任何技术可以比批处理更胜任这种场景。如果需要开发一个批处理应用,可以通过SpringBatch,使用Spring强大的面向POJO的编程模型。
Spring Batch的主页(http://projects.spring.io/spr...)

Spring Data

Spring Data使得在Spring中使用任何数据库都变得非常容易。NoSQL数据库提供了使用数据的新方法,这些方法会比传统的关系型数据库更为合适。不管你使用文档数据库,如MongoDB,图数据库,如Neo4j,还是传统的关系型数据库,Spring Data都为持久化提供了一种简单的编程模型。

这包括为多种数据库类型提供了一种自动化的Repository机制,它负责为你创建Repository的实现

Spring Social

Spring的一个社交网络扩展模块。Spring Social更多的是关注连接(connect),而不是社交(social)。
它能够帮助你通过REST API连接Spring应用,其中有些Spring应用可能原本并没有任何社交方面的功能目标。
https://spring.io/guides/gs/a...
https://spring.io/guides/gs/a...

Spring Mobile

Spring Mobile是Spring MVC新的扩展模块,用于支持移动Web应用开发

Spring for Android

通过Spring框架为开发基于Android设备的本地应用提供某些简单的支持。它还能与Spring Social协作,使得原生应用可以通过REST API进行社交网络的连接。Spring for Android的主页(http://projects.spring.io/spr...)

Spring Boot

Spring Boot以Spring的视角,致力于简化Spring本身。Spring Boot大量依赖于自动配置技术,它能够消除大部分(在很多场景中,甚至是全部)Spring配置。还提供了多个Starter项目,不管你使用Maven还是Gradle,这都能减少Spring工程构建文件的大小

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67299.html

相关文章

  • [直播视频] 《Java 微服务实践 - Spring Boot 系列》限时折扣

    摘要:作为微服务的基础设施之一,背靠强大的生态社区,支撑技术体系。微服务实践为系列讲座,专题直播节,时长高达小时,包括目前最流行技术,深入源码分析,授人以渔的方式,帮助初学者深入浅出地掌握,为高阶从业人员抛砖引玉。 简介 目前业界最流行的微服务架构正在或者已被各种规模的互联网公司广泛接受和认可,业已成为互联网开发人员必备技术。无论是互联网、云计算还是大数据,Java平台已成为全栈的生态体系,...

    Enlightenment 评论0 收藏0
  • Spring实战》读书笔记——Spring简介

    摘要:如何降低开发的复杂性最小侵入编程通过面向接口和依赖注入实现松耦合基于编程惯例和切面进行声明式编程通过模板减少样板式代码容器在应用中,不再由对象自行创建或管理它们之间的依赖关系容器负责创建对象装配对象配置它们并管理它们的整个生命周期。 欢迎大家关注我的微信公众号,一起探讨Java相关技术 showImg(https://segmentfault.com/img/bVboaBO?w=129...

    CKJOKER 评论0 收藏0
  • mica 简介和组件图谱

    摘要:仅依赖全家桶,无第三方依赖。码云微服务开发核心包,由于功能众多不做详细描述,大家可以看组件图谱。码云对相关组件进行的扩展,暂未开源,敬请期待组件图谱 mica 云母,寓意为云服务的核心,使得云服务开发更加方便快捷。mica 的前身是 lutool,lutool 在内部孵化了小两年,已经被多个朋友运用到企业。由于 lutool 对微服务不够友好,故重塑了mica。 mica 核心依赖 m...

    wqj97 评论0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》

    摘要:下一代服务端开发下一代服务端开发第部门快速开始第章快速开始环境准备,,快速上手实现一个第章企业级服务开发从到语言的缺点发展历程的缺点为什么是产生的背景解决了哪些问题为什么是的发展历程容器的配置地狱是什么从到下一代企业级服务开发在移动开发领域 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<