1.Spring的发展

1.1 Spring1.x 时代

在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换。appliationContext.xml 所有的对象和对象之间的关系 全部用xml文件配置!

<bean id="userDAO" class="com.blog.dao.UserDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate"></property>
</bean>

<bean id="userService" class="com.blog.service.UserServiceImpl">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>

<bean id="loginAction" class="com.blog.action.LoginAction" scope="prototype">
<property name="userService">
<ref bean="userService"/>
</property>
</bean>

1.2 Spring2.x时代

  随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。

  • ​@Configuration​​把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
  • ​@Scope​​注解 作用域
  • ​@Lazy(true)​​ 表示延迟初始化
  • ​@Service​​用于标注业务层组件、
  • ​@Controller​​用于标注控制层组件(如struts中的action)
  • ​@Repository​​用于标注数据访问组件,即DAO组件。
  • ​@Component​​泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
  • ​@Scope​​用于指定scope作用域的(用在类上)

那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践
–应用的基本配置用xml,比如:数据源、加载资源文件等;
–业务开发用注解,比如:Service中注入bean等; @Resource @Autowire @Servevice @Controller…

项目:XML(数据源、加载资源文件) + 注解 (@Resource @Autowire @Servevice @Controller…

XML(基础的配置)+注解(对象之前的关系) 开发模式!!

1.3 Spring3.x到Spring4.x

从Spring3.x开始提供了Java配置方式(使用Java中一个类来作为配置文件,使用类把XML文件替换),使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。

后期开发的时候可以完全不用xml文件。全部用户注解和配置类方式完成

绿皮火车------ Spring XML配置
动车--------- Spring XML配置+注解配置
高铁----------SpringBoot 零XML配置 SSM SSH SSS

2.SpringBoot快速入门

2.1.简介

pring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者的。

在以前的spring项目中,都会面对大量繁琐的配置,使用的时候基本上都是大量的复制黏贴。而Spring Boot 则能让我们在不需要过多的配置下,轻松快速地搭建Spring Web应用,开箱即用,没有代码生成,也无需XML配置,从而快速使用spring框架。

以往的spring应用往往需要大量的xml配置,为了改变这一现状spring团队引入了java config(主要依赖@Configuration、@Bean等注解)配置方案,但在整合第三方库时依然需要配置很多固定的Bean,这和xml配置一样仍然有些繁琐,因此spring boot项目应运而生,采用自动化配置方案简化spring应用开发的配置工作。

2.2 SpringBoot的特点

  • 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验
  • 绝对没有代码生成,也无需 XML 配置。
  • 快速创建独立运行的Spring项目以及与主流框架集成
  • 使用嵌入式的Servlet容器,应用无需打成WAR包
  • starters(启动器)自动依赖与版本控制
  • 大量的自动配置,简化开发,也可修改默认值
  • 无需配置XML,无代码生成,开箱即用
  • 准生产环境的运行时应用监控
  • 与云计算的天然集成

更多细节,大家可以到​​官网​​查看。

SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml
SpringBoot官方文档地址:

​https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-documentation-about​

2.3.HelloWorld

需求:
浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;

  • 创建一个Maven工程
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_spring_02
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_03
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_04
  • 导入spring boot父工程
    看到这里很多同学会有疑惑,前面说传统开发的问题之一就是依赖管理混乱,怎么这里我们还需要管理依赖呢?难道SpringBoot不帮我们管理吗?

别着急,现在我们的项目与SpringBoot还没有什么关联。SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.bruceliu.springboot.hello</groupId>
<artifactId>springboot-hello</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

</project>
  • 导入spring boot 的Web启动器
    为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为启动器。因为我们是web项目,这里我们引入web启动器:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。
这个时候,我们会发现项目中多出了大量的依赖:
SpringBoot系列课程(一)-构建第一个SpringBoot工程_spring_05
这些都是SpringBoot根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。

  • 管理jdk版本
    默认情况下,maven工程的jdk版本是1.5,而我们开发使用的是1.8,因此这里我们需要修改jdk版本,只需要简单的添加以下属性即可.如果是1.8的JDK,那么可以不配置。
<properties>
<java.version>1.8</java.version>
</properties>
  • 完整的POM文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.bruceliu.springboot.hello</groupId>
<artifactId>springboot-hello</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

</project>
  • 启动类
    Spring Boot项目通过main函数即可启动,我们需要创建一个启动类:
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_06
    然后编写main函数:
/**
* @author bruceliu
* @create 2019-04-30 23:52
* @description
*/
@SpringBootApplication
public class APP {
public static void main(String[] args) {
SpringApplication.run(APP.class, args);
}
}
  • 控制器
    接下来,我们就可以像以前那样开发SpringMVC的项目了!
    我们编写一个controller:
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_07
    代码:
/**
* @author bruceliu
* @create 2019-04-30 23:54
* @description
*/
@RestController
public class HelloController {

@GetMapping("hello")
public String hello(){
return "hello, spring boot!";
}
}
  • 启动测试
    接下来,我们运行main函数,查看控制台,并且可以看到监听的端口信息:
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_08
    1)监听的端口是8080
    2)SpringMVC的映射路径是:/
    3)/hello路径已经映射到了HelloController中的hello()方法
  • 测试: 打开页面访问:http://localhost:8080/hello
    SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_09

2.4.Jar包部署

2.4.1.插件支持

<build>
<plugins>
<!-- springboot maven打包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

2.4.2.打包

SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_10

2.4.3.运行

窗口运行:java -jar xxx.jar
后台运行(linux): nohup java -jar XXX.jar &

3.SpringBoot另外构建方式

3.1.方法一:在 Spring Boot官方Initializer页面在线构建工程再导入到Ide中

​https://start.spring.io/​

SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_11

3.2.方法二:使用IDEA自动构建SpringBoot工程

直接在Idea中​​Create New Project​​​ --> ​​Spring Initializr​​​ --> 填写group、artifact -->钩上web --> 点下一步就行了
SpringBoot系列课程(一)-构建第一个SpringBoot工程_spring_12

SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_13

SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_14
SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_15

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目;选择我们需要的模块;向导会联网创建Spring Boot项目;

默认生成的Spring Boot项目;

  • 主程序已经生成好了,我们只需要我们自己的逻辑
  • resources文件夹中目录结构
  • static:保存所有的静态资源; js css images;
  • templates:保存所有的模板页面;(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker、thymeleaf);
  • application.properties:Spring Boot应用的配置文件;可以修改一些默认设置;

4.自定义Banner

启动Spring Boot项目后会看到这样的图案:
SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_16
这个图片其实是可以自定义的:
现在该怎么做呢?

1.打开网站:
​​​ http://patorjk.com/software/taag/#p=display&h=1&f=Graffiti​

2.拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt
将banner.txt拷贝到项目的resources目录中:
SpringBoot系列课程(一)-构建第一个SpringBoot工程_maven_17
3.重新启动程序,查看效果:
SpringBoot系列课程(一)-构建第一个SpringBoot工程_xml_18
如果不想看到任何的banner,也是可以将其关闭的:
SpringBoot系列课程(一)-构建第一个SpringBoot工程_spring_19