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官方文档地址:
2.3.HelloWorld
需求:
浏览器发送hello请求,服务器接受请求并处理,响应Hello World字符串;
- 创建一个Maven工程
- 导入spring boot父工程
看到这里很多同学会有疑惑,前面说传统开发的问题之一就是依赖管理混乱,怎么这里我们还需要管理依赖呢?难道SpringBoot不帮我们管理吗?
别着急,现在我们的项目与SpringBoot还没有什么关联。SpringBoot提供了一个名为spring-boot-starter-parent的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!
<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根据spring-boot-starter-web这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。
- 管理jdk版本
默认情况下,maven工程的jdk版本是1.5,而我们开发使用的是1.8,因此这里我们需要修改jdk版本,只需要简单的添加以下属性即可.如果是1.8的JDK,那么可以不配置。
<properties>
<java.version>1.8</java.version>
</properties>
- 完整的POM文件
<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函数即可启动,我们需要创建一个启动类:
然后编写main函数:
/**
* @author bruceliu
* @create 2019-04-30 23:52
* @description
*/
public class APP {
public static void main(String[] args) {
SpringApplication.run(APP.class, args);
}
}
- 控制器
接下来,我们就可以像以前那样开发SpringMVC的项目了!
我们编写一个controller:
代码:
/**
* @author bruceliu
* @create 2019-04-30 23:54
* @description
*/
public class HelloController {
("hello")
public String hello(){
return "hello, spring boot!";
}
}
- 启动测试
接下来,我们运行main函数,查看控制台,并且可以看到监听的端口信息:
1)监听的端口是8080
2)SpringMVC的映射路径是:/
3)/hello路径已经映射到了HelloController中的hello()方法 - 测试: 打开页面访问:http://localhost:8080/hello
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.打包
2.4.3.运行
窗口运行:java -jar xxx.jar
后台运行(linux): nohup java -jar XXX.jar &
3.SpringBoot另外构建方式
3.1.方法一:在 Spring Boot官方Initializer页面在线构建工程再导入到Ide中
3.2.方法二:使用IDEA自动构建SpringBoot工程
直接在Idea中Create New Project
--> Spring Initializr
--> 填写group、artifact -->钩上web --> 点下一步就行了
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项目后会看到这样的图案:
这个图片其实是可以自定义的:
现在该怎么做呢?
1.打开网站:
http://patorjk.com/software/taag/#p=display&h=1&f=Graffiti
2.拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt
将banner.txt拷贝到项目的resources目录中:
3.重新启动程序,查看效果:
如果不想看到任何的banner,也是可以将其关闭的: