2022-06-09


SpringBoot入门



一、使用JavaConfig替代xml配置

我们通常使用 Spring 都会使用 XML 配置,随着功能以及业务逻辑的日益复杂,应用伴随着大量的 XML 配置文件以及复杂的 bean 依赖关系,使用起来很不方便。

优势:

1、面向对象的配置。由于配置被定义为 JavaConfig 中的类,因此用户可以充分使用 Java 中的面向对象功能。一个配置类可以继承另一个重写它的 @Bean 方法等。

2、减少或者消除 XML 配置。提供了一种纯 Java 的方式来配置与 XML 配置概念相似的 Spring 容器。

3、类型安全和重构友好。提供了一种类型安全的方法了来配置 Spring 容器,由于 Java 5 对泛型的支持,现在可以按类型而不是名称检索 bean,不需要任何的强制转换或者基于字符串的查找。

二、JavaConfig 方式配置 IoC

@Configuration:在类上贴该注解表示该类是 Spring 的配置类,具有 applicationContext.xml 文件的作用。

@Configuration:在类上贴该注解表示该类是 Spring 的配置类,具有 applicationContext.xml 文件的作用。

@Bean:在 Spring 的配置类的方法上贴该注解后,该方法返回的对象会交给 Spring 容器管理,替代 applicationContext.xml 中的 bean 标签。(属于手动配置方式,可以使用注解配置替代)

@ComponentScan:在 Spring 配置类上贴该注解表示开启组件扫描器,默认扫描当前配置类所在的包,也可以自己指定,替代 XML 配置中的 <context:component-scan /> 标签。(扫描器,扫描需要生成的类)

AnnotationConfigApplicationContext:该类是 ApplicationContext 接口的实现类,该对象是基于 JavaConfig 的方式来运作的 Spring 容器(属于手动配置方式,可以使用注解配置替代)

三、JavaConfig 方式配置 DI

原理:Spring 容器在调用实例方法时,根据方法返回对象类型,判断容器中是否已经存在该类型的实例对象,如果不存在则执行实例方法,将返回对象实例交给容器管理,如果该实例已经存在了,直接从容器中拿已经存在实例对象方法,不执行实例方法。

```   

@Bean

public SomeBean someBean() {

    SomeBean someBean = new SomeBean();

    return someBean;

}(属于手动配置,可使用注解替代)

```

四、使用 IoC DI 注解简化配置

与使用xml注解类似,在需要交给Spring容器管理的类贴上注解@Component,在字段或者设置器上贴@AutoWired即可,在字段上贴属于暴力破解封装,在设置器上贴注解属于使用反射获取。再创建配置类,在配置类上贴上两个注解即可,与xml配置中的       <context:component-scan base-package="cn.wolfcode.bean"/>      扫描器功能相同。

```

@Configuration // 表示该类是 Spring 的配置类

@ComponentScan // 开启组件扫描器,默认扫描当前类所在的包,及其子包

public class JavaConfig { }

```

五、使用junit4和junit5测试类测试的差异

说明:junit5测试类更加简洁。

```

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes={配置类1.class, 配置类2.class, ...})

public class IoCTest {

    @Autowired

    private SomeBean someBean;

    @Test

    public void test() {

        System.out.println(someBean);

    }

}

```

```

@SpringJUnitConfig(配置类.class)

class IoCTest {

    @Autowired

    private SomeBean someBean;

    @Test

    void test() {

        System.out.println(someBean);

    }

}

```

六、JavaConfig配置关联次配置

说明:主配置类中关联了次配置类后,测试类中只需要加载主配置文件的路径即可。

```

// 主配置类 mvc.xml

@Configuration

@Import(OtherJavaConfig.class) // 在主配置类中关联次配置类

public class JavaConfig { ... }

// 次配置类 applicationContext.xml

@Configuration

public class OtherJavaConfig { ... }

// 测试

@SpringJUnitConfig(classes = JavaConfig.class) // 加载主配置类

public class IoCTest { ... }

```


七、Spring Boot 介绍

概念:Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

人们把 Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的 Spring 项目,并且尽可能的减少一切 XML 配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。

1、优点

创建独立运行的 Spring 应用程序;

可嵌入 Tomcat,无需部署 war 文件;

简化 Maven 配置;

自动配置 Spring(减少配置);

提供生产就绪型功能,如:日志,健康检查和外部配置等;

不要求配置 XML;

非常容易和第三方框架集成起来。

2、缺点

版本更新较快,可能出现较大变化;

因为约定经常会出现一些很难解决的问题。

(一)使用 IDEA 创建 Spring Boot 工程

两种创建方式:

1.使用官方提供的工具来快速构建项目。IDEA 自带该功能,但需要联网使用。

2.直接在idea上创建。


疑惑解答:

当前项目继承的 spring-boot-starter-parent 项目有什么用?


导入的依赖 spring-boot-starter-web 有什么用?


占用 8080 端口的 Tomcat9 服务器哪来的?


之前的 Web 应用打包是 war,为什么现在的打包方式是 jar?


@SpringBootApplication 注解有什么用?


main 方法中执行的代码 SpringApplication.run(..) 有什么用?

(二)Spring Boot Starter

概述:Spring Boot 在配置上相比 Spring 要简单许多,其核心在于 spring-boot-starter, 在使用 Spring Boot 来搭建一个项目时,只需要引入官方提供的 starter,就可以直接使用,免去了各种配置。

以后若添加依赖时候,发现这个依赖有 starter,  一般这个依赖都会帮开发者配置东西

官方目前已提供的常见的 Starter 如下 :

spring-boot-starter:核心启动器,提供了自动配置,日志和 YAML 配置支持。

spring-boot-starter-aop:支持使用 Spring AOP 和 AspectJ 进行切面编程。

spring-boot-starter-freemarker:支持使用 FreeMarker 视图构建 Web 应用。

spring-boot-starter-test:支持使用 JUnit,测试 Spring Boot 应用。

spring-boot-starter-web:支持使用 Spring MVC 构建 Web 应用,包括 RESTful 应用,使用 Tomcat 作为默认的嵌入式容器。

spring-boot-starter-actuator:支持使用 Spring Boot Actuator 提供生产级别的应用程序监控和管理功能。

spring-boot-starter-logging:提供了对日志的支持,默认使用 Logback。

有关 Spring Boot Starter 命名规范,所有官方发布的 Starter 都遵循以下命名模式:spring-boot-starter-*,其中 * 指特定的应用程序代号或名称。任何第三方提供的 Starter 都不能以 spring-boot 作为前缀,应该将应用程序代号或名称作为前缀,譬如 mybatis-spring-boot-starter。



(三)重要的依赖

web启动器:(Spirngboot已经帮我们配置好了

```

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

</dependencies>

```

```

Spring Boot 项目打包独立运行:

需要我们手动导入,导入后打包会自动生成可独立运行的jar包,否则只有源代码的jar包,运维拿到后还需要装tomcat才能运行

命令行    **启动项目**    时的指令:java -jar xxx.jar --server.port=80;

<!-- pom.xml 中添加插件 -->

<build>

    <plugins>

        <!-- Spring Boot 打包插件 -->

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

        </plugin>

    </plugins>

</build>

```

八、Spring Boot 参数配置

配置文件的三种写法(一般使用application.properties配置)

自定义 properties 文件

```

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/rbac

jdbc.username=root

jdbc.password=admin

```

application.properties 语法

```

server.port=80

server.session-timeout=30

server.tomcat.uri-encoding=UTF-8

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/rbac

spring.datasource.username=root

spring.datasource.password=admin

```

application.yml 语法

```

server:

  port: 80

  session-timeout: 30 

  tomcat.uri-encoding: UTF-8 

spring: 

  datasource: 

    url: jdbc:mysql://localhost:3306/crm 

    username: root 

    password: admin 

    driverClassName: com.mysql.jdbc.Driver

```

概述:读取三种配置文件的方式

一、使用自定义 properties 文件,一定要关联配置类,使用@PropertySource("classpath:db.properties")以及@Value("${jdbc.driverClassName}")两个注解同时完成配置(一般不使用)

二、参数配置在 application.properties(不要关联)

三、@ConfigurationProperties 绑定对象属性

注意:若是使用测试类加载贴有 @Configuration 的配置类,则需要在配置类中添加 @EnableConfigurationProperties 注解;若是使用测试类加载贴有 @SpringBootApplication 的配置类,则不需要。

四、使用 Spring 的 Environment 对象绑定属性

第一步:在# application.properties写好配置文件

```

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/crm

jdbc.username=root

jdbc.password=admin

```

第二步:在配置类中贴上对应的注解

第一种方式:

```

@Component

@ToString

@Setter

@ConfigurationProperties(prefix="jdbc")

public class MyDataSource {

    private String driverClassName;

    private String url;

    private String username;

    private String password;

}

第二种方式:

 ```

@Bean

@ConfigurationProperties("jdbc")

public MyDataSource dataSource() {

    return new MyDataSource();

}

```

第三步:在测试类中创建environment对象,使用environment对象获取配置文件的信息

```

@Configuration

@PropertySource("classpath:db.properties")

public class JavaConfig {

    /**

    * environment:表示 Spring 的环境对象,该对象包含了加载的属性数据

    * 可以获取到 application.properties 里面的参数,也可以获取到 @PropertySource 中的参数

    * 但 application.properties 的优先级比 @PropertySource 高

    */

    @Autowired

    private Environment environment;

    @Bean

    public MyDataSource dataSource() {

        MyDataSource dataSource = new MyDataSource();

        dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));

        dataSource.setUrl(environment.getProperty("jdbc.url"));

        dataSource.setUsername(environment.getProperty("jdbc.username"));

        dataSource.setPassword(environment.getProperty("jdbc.password"));

        return dataSource;

    }

}

```

使用时机:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容