文档章节

Spring Boot实战之基础回顾

吴伟祥
 吴伟祥
发布于 08/21 21:04
字数 2011
阅读 30
收藏 7

本文作者: 吴伟祥

本文链接: https://wuweixiang.cn/2018/08/21/Spring-Boot实战之基础回顾/

版权声明: 本博客所有文章除特别声明外均为原创,采用CC BY-NC-SA 4.0 许可协议。转载请在文章开头明显位置注明原文链接和作者等相关信息,明确指出修改(如有),并通过 E-mail 等方式告知,谢谢合作!

认识Java EE中王者

Java EE,Java平台企业版(Java Platform Enterprise Edition),之前称为Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名为Jakarta EE。是Sun公司为企业级应用推出的标准平台。Java平台共分为三个主要版本Java EE、Java SE和Java ME。

Java EE是一系列技术标准所组成的平台,包括:

Servlet - Java Servlet API

JDBC - Java数据库联接(Java Database Connectivity)

JSP - Java服务器页面(Java Server Pages)

JSTL - Java服务器页面标准标签库(Java Server Pages Standard Tag Library)

JMS - Java消息服务(Java Message Service)

Applet - Java Applet

EJB - 企业级JavaBean(Enterprise Java Beans)

JAAS - Java Authentication and Authorization Service

JACC - J2EE Authorization Contract for Containers

JAF - Java Beans Activation Framework

JAX-RPC - Java API for XML-Based Remote Procedure Calls

JAX-WS - Java API for XML Web Services

JAXM - Java API for XML Messaging

JAXP - Java XML解析API(Java API for XML Processing)

JAXR - Java API for XML Registries

JCA - J2EE连接器架构(J2EE Connector Architecture)

JMX - Java Management

JNDI - Java名称与目录接口(Java Naming and Directory Interface)

JSF - Java Server Faces

JTA - Java事务API(Java Transaction API)

JavaMail

StAX - Streaming APIs for XML Parsers

WS - Web Services

回顾Spring

Spring的简史

Spring每个新版本的推出都以减少配置作为自己的主要目标

第一阶段:xml配置

在Spring 1.x时代,使用Spring 开发满眼都是xml配置的Bean,随着项目的扩大,我们需要把xml配置文件放到不同的配置文件里,那时候需要频繁地在开发的类和配置文件之间切换。

第二阶段:注解配置

在Spring 2.x 时代,随着JDK1.5带来的注解支持,Spring提供了声明Bean的注解(例如@Component、@Service),大大减少了配置量。主要使用的方式是应用的基本配置(如数据库配置)用xml,业务配置用注解。

第三阶段:Java配置

Spring 3.0 引入了基于 Java 的配置能力,这是一种类型安全的可重构配置方式,可以代替 XML。我们目前刚好处于这个时代,Spring4.x开始都推荐使用Java配置。

Spring概述

在当前Java EE 开发中,Spring框架是当之无愧的王者。Spring框架是一个轻量级的企业级开发的一站式解决方案。所谓解决方案就是可以基于spring解决Java EE开发的所有问题。Spring框架提供了IoC容器,AOP、数据访问、Web开发、消息、测试等相关技术的支持

Spring 使用简单的POJO(Plain Old Java Object,即无任何限制的普通Java对象)来进行企业级开发。每一个被Spring管理的Java对象都称之为Bean;而Spring提供了一个IoC容器来初始化对象,解决对象间的依赖管理和对象的使用。

 

简单地说,这六个模块实现的功能分别为:

Ø 核心容器:核心模块,提供了IoC/DI容器

Ø AOP:AOP的实现和AspectJ的支持

Ø 消息:提供对基于消息应用的支持,提供与Spring Integration的集成

Ø 数据访问与集成:JDBC访问的简化、事务的支持,ORM(Object Relation Mapping)框架(如JPA、Hibernate和Mybatis等)与OXM(Object XML Mapping)框架的集成

Ø Web:Spring MVC的实现,能集成众多模板引擎技术(如Thymeleaf、JSP与Velocity等)

Ø 测试:提供大量Mock对象,支持单元测试;提供Spring Context的测试支持,支持集成测试

Spring的四大原则

1)使用POJO进行轻量级和最小侵入式开发。

2)通过依赖注入和基于接口编程实现松耦合。

3)通过AOP和默认习惯进行声明式编程。

4)使用AOP 和模板减少模式化代码。

Spring所有功能的设计和实现都是基于此四大原则。

Spring基础配置

依赖注入

Inversion of Control – IOC 和Dependency injection –DI 在Spring环境下是等同的概念,控制翻转是通过依赖注入实现的。所谓的依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。

依赖注入体现了一种“组合”的理念。主要目的是为了解耦。

Spring IoC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。无论是xml配置、注解配置还是Java配置,都被称为配置元数据(元数据=描述数据的数据)。元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据行解析后进行一些有意义的操作。Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。

声明Bean的注解:

Ø @Component(没有明确的角色)

Ø @Service(Service层)

Ø @Repository(Dao层)

Ø @Controller(表现层 MVC ->Spring MVC)

注入Bean的注解(可注解在Set方法和属性上):

Ø @Autowired

Ø @Inject

Ø @Resource

Java配置

​ Java配置是Spring 4.x推荐方式,可以完全替代xml配置;Java配置也是Spring Boot推荐的配置方式。

​ Java配置是通过@Configuration和@Bean来实现的。

Ø @Configuration声明当前类是一个配置类,相当于一个Spring配置的xml文件

Ø @Bean注解在方法上,声明当前方法的返回值为一个Bean

何时使用Java配置或者注解配置呢?

全局配置:使用java配置(如数据库相关配置、MVC相关配置)

业务Bean的配置:使用注解配置

@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
}

等价于spring的xml里的配置

<beans>
<bean id="myService" class="com.zhoan.service.impl.MyServiceImpl"/>
</beans>

AOP

Spring支持的AspectJ注解式切面编程

(1)使用@Aspect声明是一个切面

(2)使用@After,@Before,@Around 定义建言(advice),可以直接将拦截规则(切点PointCut)作为参数

(3)为了使切点复用,可使用@PointCut专门定义拦截规则,然后在@After,@Before,@Around的参数中调用

(4)其中符合条件的每一个被拦截处为连接点(JoinPoint)

注解式拦截能够很好的控制要拦截的粒度和获得更丰富的信息,Spring本身在事务处理(@Transcational)和数据缓存池(@Cacheable)等上面都使用了此种形式的拦截

回顾Spring MVC

Spring MVC概述

MVC和三层架构是什么关系?

MVC:Model + View + Controller (数据模型+视图+控制器)

三层架构:Presentation tier + Application tier + Data tier(表现层+应用层+数据访问层)

三层架构是一种软件架构设计理念,适用于所有项目;

而mvc只是表现层的一种细化。把表现层划分为M -V- C三个模块。

Spring MVC常用注解

@Controller

声明Bean的注解都组合了@Component元注解,但在SpringMVC声明控制器Bean的时候,只能用@Controller

@RequesMapping

用来映射Web请求(访问路径和参数)、处理类和方法的。方法上的@RequestMapping路径会集成注解在类上的路径。

@ResponseBody

支持返回值放在response体内,而不是返回一个页面

@PathVariable

用来接收路径参数,如/news/{a},/news/1可以接收1作为a的参数值

@RestController

组合注解,组合了@Controller和@ResponseBody

Spring MVC基础配置

Ø 静态资源映射

Ø 拦截器配置

Ø 视图解析器配置

Ø 文件上传配置

Ø 自定义HttpMessageConverter

 

© 著作权归作者所有

吴伟祥
粉丝 10
博文 358
码字总数 250326
作品 0
泉州
后端工程师
私信 提问
论代码所需要的环境、版本的重要性

学员们在参与“基于Spring Boot的博客系统实战”课程的时候,可能没有太注意版本的问题。其实,版本是一个非常重要也是一个非常容易忽略的问题。 版本不一致会导致各种奇怪的问题,比如: 应...

老卫
06/26
0
0
自定义spring boot starter三部曲之一:准备工作

版权声明:欢迎转载,请注明出处,谢谢。 https://blog.csdn.net/boling_cavalry/article/details/82956512 从本章开始,一起实战一个自定义的spring boot starter,整个系列共三篇文章,内容...

博陵精骑
10/08
0
0
新书上架:《Spring Boot 开发实战》(基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战)

新书上架:《Spring Boot 开发实战》 — 基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail...

程序员诗人
08/05
0
0
新书上架:《Spring Boot 开发实战》基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战

新书上架:《Spring Boot 开发实战》 — 基于 Kotlin + Gradle + Spring Boot 2.0 的企业级服务端开发实战 京东下单链接 https://item.jd.com/31178320122.html 天猫下单链接 https://detail...

程序员诗人
08/22
0
0
《 Kotlin + Spring Boot : K2EE 服务端开发实战 》

《 Kotlin + Spring Boot : K2EE 服务端开发实战 》 第一篇 Spring Boot 基础 第1章 Spring Boot 与 Kotlin 的极简理念 第2章 Spring Boot + Kotlin 快速开始 Hello World 第3章 Spring Boo...

程序员诗人
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

RabbitMQ+PHP 教程三(Publish/Subscribe)用yii2测试通过

介绍 在前面的教程中,我们创建了一个工作队列。工作队列背后的假设是每个任务都交付给一个工作人员处理。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者发送消息。此模式...

hansonwong
25分钟前
2
0
关于JAVA你必须知道的那些事(四):单例模式和多态

好吧,今天一定要把面向对象的最后一个特性:多态,给说完。不过我们先来聊一聊设计模式,因为它很重要。 设计模式 官方的解释是,设计模式是:一套被反复使用,多数人知晓的,经过分类编目,...

拾光TM
25分钟前
1
0
ES6 系列之 Babel 是如何编译 Class 的(下)

摘要: ## 前言 在上一篇 [《 ES6 系列 Babel 是如何编译 Class 的(上)》](https://github.com/mqyqingfeng/Blog/issues/105),我们知道了 Babel 是如何编译 Class 的,这篇我们学习 Babel ...

阿里云官方博客
26分钟前
1
0
附实例!实现iframe父窗体与子窗体的通信

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本...

腾讯云加社区
32分钟前
1
0
JSP页面传List集合到Action中

1:JSP页面(前端用的是H-UI框架) <div class="codeView docs-example"> <table class="table table-border table-bordered table-striped"> <thead> ......

uug
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部