1、Spring发展
Spring1.x时代:都是xml方式配置bean,但是随着项目的规模增大,xml变得臃肿不堪,非常复杂。
Spring2.x时代:增加注解方式,xml和注解共存。那么就讨论起用注解还是用xml,主要还是实践。
Spring3.x-Spring4.x:Spring推荐使用java配置方式。
2、Spring的java配置方式
Spring的java配置方式是通过@configuration和@bean两个注解实现的:
1.@configuration标注在类上边,相当于配置文件
2.@bean标注在方法上,相当于xml中的bean。
2.1 读取外部的资源配置文件
@PropertySource可以指定外部的配置文件,@Value可以得到注解中的值。
1. @Configuration //通过注解表明这个类是个Spring的配置,相当于xml文件
2. @ComponentScan(basePackage = "") //配置扫描包
3. @PropertySource(“classpass:jdbc.properties” ,” ” ,” ”) //如果配置文件有多个的话,加逗号,再写配置文件
4. public class SpringConfig {
5.
6. @Value(${jdbc.url})
7. private String jdbcUrl;
8.
9. @Bean //通过注解表示是一个Bean对象,相当于xml的
10. public UserDao getUserDao() {
11. return new UserDao;
12. }
13. }
3、SpringBoot示例
3.1 Spring解决了什么问题?
Java开发过程中存在的一些问题,繁多的配置,低下的开发效率,项目部署复杂,与第三方技术集成困难。
SpringBoot内置了一些流行的开发框架的配置,让项目能够快速运行起来,SpringBoot容易创建一个能独立运行的项目(不用再向容器(Tomcat)部署了)。
3.2、Spring优点
快速构建项目
对主流框架无缝集成
项目可独立运行,无需依赖外部Servlet容器
提供运行时的应用监控
极大提高了开发、部署的效率
与云计算的天然集成
3.3、SpringBoot入门项目构建
3.3.1 设置SpringBoot的parent
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
3.3.2 导入SpringBoot的Web支持
org.springframework.boot
spring-boot-starter-web
1.5.9.RELEASE
3.3.3 添加SpringBoot的插件
org.springframework.boot
spring-boot-maven-plugin
1.5.9.RELEASE
3.3.4 编写第一个SpringBoot的应用
package com.inverseli.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @ClassName: HelloApplication
* @Description:
* @Author: li
* @Date: 2018/7/10 12:02
* @Version: 1.0
*/
@Controller
@SpringBootApplication //
@Configuration
public class HelloApplication {
@RequestMapping("hello")
@ResponseBody
public String Hello() {
return "say hello";
}
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class,args);
}
}
其中注解:
@SpringBootApplication: 通常用在主类上。
@Controller:就是SpringMvc的一个控制器。
@Configuration:指出该类是 Bean 配置的信息源,相当于XML中的
@Bean:相当于XML中的
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。
Maven的pom.xml中依赖如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
com.inverseli.springboot
inverseli-springboot
1.0-SNAPSHOT
war
org.springframework
spring-webmvc
4.3.7.RELEASE
com.jolbox
bonecp-spring
0.8.0.RELEASE
org.springframework.boot
spring-boot-starter-web
1.5.9.RELEASE
org.springframework.boot
spring-boot-maven-plugin
1.5.9.RELEASE
在其中并没有配置Tomcat,也没有Spring的配置文件。
4、SpringBoot的核心
4.1 SpringBoot入口类和@SpringBootApplication注解
由于约定,总会有一个xxxApplication的类会是SpringBoot的入口类,入口类中有main方法。
@SpringBootApplication: 是SpringBoot的核心注解,其实是一个组合注解组合了以下注解:
@SpringBootConfigure: 是SpringBoot的配置注解,本身也是一个组合注解。在SpringBoot项目中推荐使用@SpringBootConfigure代替@Configure
@EnableAutoConfigure 启用自动配置,该注解会根据项目依赖的jar包,自动引入配置。例如项目中引入了spring-boot-starter-web依赖,项目就会引入SpringMvc的依赖,SpringBoot会自动配置Tomcat和SpringMvc。
@ComponentScan 默认扫描@SpringBootApplication所在的类的同级目录和子目录。
4.2 关闭自动配置
//如果不需要某项提供的自动配置,那么可以手动进行关闭
@Controller
@SpringBootApplication(exclude = {MongoAutoConfiguration.class})
@Configuration
public class HelloApplication {}
就关闭了MongoAutoConfiguration 的自动配置。
4.3 自定义SpringBoot banner
banner 就是运行项目时在console显示spring的标志
把你想换成的样式文字放到一个txt文本中,然后把该文本放到resource文件夹中,重新运行项目就好了。
当然也可以禁用banner
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(HelloApplication.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
4.4 SpringBoot全局配置
SpringBoot项目使用一个全局配置文件,一般叫做application.properties或者是application.yml,一般放到resource文件夹下。
假如要改掉Tomcat的端口,只需在配置文件中Server.port = 8088就可以了;可以查看官方文档以确定配置文件参数;
官方文档地址:版本2.1.0.BUILD-SNAPSHOT
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/
4.5 Starter pom
SpringBoot提供了简化企业级开发绝大多数场景中的Starter pom,只要使用了相关的Starer pom,相关的技术配置就会消除,就可以得到SpringBoot为我们提供的bean。除了官方提供的Starter pom,也有第三方提供的
4.6 SpringBoot自动配置的原理
SpringBoot在进行SpringApplication对象实例化的时候,会加载META-INF/spring.factories文件,将配置文件中的文件载入到Spring容器中。
5、SpringBoot
层级关系: 注意HelloApplication的位置(启动类位置很重要)
HelloApplication.java
package com.inverseli.learning;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @date:2018年9月19日 上午11:38:55
* @author liyuhao
* @version 1.0
* @since JDK 1.8
* @description:
*/
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class,args);
}
}
controller/HelloController.java
package com.inverseli.learning.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @date:2018年9月19日 上午11:43:26
* @author liyuhao
* @version 1.0
* @since JDK 1.8
* @description:
*/
@RestController
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String toTest() {
return "Hello World!";
}
}
结果: