spring boot实战读书笔记(1)

142 阅读2分钟

Spring Boot的使命

Spring已经成为Java应用程序开发框架的事实标准。它是J2EE的轻量级替代品,通过依赖注入面向切面编程,用简单的Java对象(POJO)实现了EJB功能。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的,即使Spring2.5引入了基于注解的组件扫描Spring3.0引入了基于Java的配置,但是配置仍然是一项艰巨的任务。另外,项目的依赖管理也是一件费力不讨好并且随之而来的不兼容问题也是生产力杀手。

以上提到的Spring开发中遇到的问题成为了Spring Boot的使命。

Spring Boot的核心特性

  • 自动配置 : 针对很多Spring应用程序常见的应用功能, Spring Boot能自动提供相关配置
  • 起步依赖 : 告诉Spring Boot需要什么功能,它就能引入需要的库
  • 命令行界面 : 这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序, 无需传统项目构建
  • Actuator : 让你能够深入运行中的Spring Boot应用程序,一探究竟

快速创建应用(命令行方式)

1. Spring cli安装

只需从官网下载,解压,并且配置path即可。

2. 创建项目

使用spring init -dweb,data-jpa,h2,thymeleaf --build gradle readinglist命令,其中-d-denpendency的缩写即指定所需依赖,--build指定构建方式是maven还是gradle,最后指定应用名字在 项 目 创 建 完 毕 之 后 , 你 可 以 打 开 项 目 ,把 DemoApplication.java改名为ReadingListApplication.java

初探Spring Boot初始应用

配置和启动引导类

ReadingListApplication是应用的配置和引导类。

package readinglist;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//以下三个注解的组合:
//@Configuration(标明使用基于Java的配置)
//@ComponentScan(启用组件扫描)
//@EnableAutoConfiguration(开启Spring Boot自动配置)
public class ReadingListApplication {
    public static void main(String[] args) {
        SpringApplication.run(ReadingListApplication.class, args);
    }
}

补充:非web类型启动

import org.springframework.boot.CommandLineRunner;

@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {

    public static void main(String[] args) throws Exception {

        SpringApplication.run(SpringBootConsoleApplication.class, args);
		
    }

    //access command line arguments
    @Override
    public void run(String... args) throws Exception {
	
        //do something
		
    }
}

Spring Boot自动配置的魔法

Spring Boot自动配置的功能由名为spring-boot-autoconfigure的jar包提供,其核心技术就是使用了从Spring4.0开始提供的条件化配置功能,条件化配置允许配置存在于应用程序中,但在满足某些特定条件之前都忽略这个配置。

定义条件:

package readinglist;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class JdbcTemplateCondition implements Condition {
    @Override
    public boolean matches(ConditionContext context,
    AnnotatedTypeMetadata metadata) {
        try {
            context.getClassLoader().loadClass(
            "org.springframework.jdbc.core.JdbcTemplate");
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

使用条件:

@Conditional(JdbcTemplateCondition.class)
public MyService myService() {
    ...
}