入门、核心配置、原理

SpringBoot

  • 简化Spring
  • 没有xml
  • 衍生版本
  • 快捷创建项目

官网

spring.io

自学:Spring Security

创建项目

使用idea通过start.spring.io网站创建项目

修改至Sprng1.5.9RELEASE版本

注解:

@RestController:

​ @Controller和@ResponseBody俩注解的合体,返回JSON字符串;

@GetMapping("/"):

​ @RequestMapping(method = RequestMethod.GET)就是此注解的化身,很好懂

@SpringBootApplication

​ 这个注解标注的类就是一个主程序类,不可以删除,代表当前项目是一个SpringBoot项目

​ 由四个元注解和三个注解组合而成:

java中元注解有四个: @Retention @Target @Document @Inherited;

@Retention()注解的保留位置:
  • @Retention(RetentionPolicy.SOURCE) //注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
  • @Retention(RetentionPolicy.CLASS) // 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
  • @Retention(RetentionPolicy.RUNTIME) // 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
@Target():注解的作用目标
  • @Target(ElementType.TYPE) //接口、类、枚举
  • @Target(ElementType.FIELD) //字段、枚举的常量
  • @Target(ElementType.METHOD) //方法
  • @Target(ElementType.PARAMETER) //方法参数
  • @Target(ElementType.CONSTRUCTOR) //构造函数
  • @Target(ElementType.LOCAL_VARIABLE)//局部变量
  • @Target(ElementType.ANNOTATION_TYPE)//注解
  • @Target(ElementType.PACKAGE) //包
@Document:说明该注解将被包含在javadoc中
@Inherited:说明子类可以继承父类中的该注解

组合注解三个:

@SpringBootConfiguration:

​ @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。其中的值可以取一下参数:

  • basePackageClasses:对basepackages()指定扫描注释组件包类型安全的替代。

  • excludeFilters:指定不适合组件扫描的类型。

  • includeFilters:指定哪些类型有资格用于组件扫描。

  • lazyInit:指定是否应注册扫描的beans为lazy初始化。

  • nameGenerator:用于在Spring容器中的检测到的组件命名。

  • resourcePattern:控制可用于组件检测的类文件。

  • scopedProxy:指出代理是否应该对检测元件产生,在使用过程中会在代理风格时尚的范围是必要的。

  • scopeResolver:用于解决检测到的组件的范围。

  • useDefaultFilters:指示是否自动检测类的注释

@EnableAutoConfiguration

​ @EnableAutoConfiguration也是一个复合Annotation。其中,最关键的要属@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器。
​ 自动配置幕后英雄:SpringFactoriesLoader。它属于Spring框架私有的一种扩展方案,其主要功能就是从指定的配置文件META-INF/spring.factories加载配置。配合@EnableAutoConfiguration使用的话,它更多是提供一种配置查找的功能支持,即根据@EnableAutoConfiguration的完整类名org.springframework.boot.autoconfigure.EnableAutoConfiguration作为查找的Key,获取对应的一组@Configuration类

@ComponentScan

​ @ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IOC容器中。我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

application.properties和application.yml

# 端口号
server.port=8089
# 端口号
server:
  port: 8090

以properties为主,并且两个文件互补。application.properties为应用的核心属性配置文件

打包:

SpringBoot的默认打包方式:jar,可以省略

<packaging>jar</packaging>

SpringBoot的默认插件,给项目打包,打成一个可执行的jar包,区别于普通jar

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

版本控制中心:

porm.xml-->spring-boot-starter-web-->spring-boot-starters-->spring-boot-parent-->spring-boot-dependencies

为什么SpringBoot依赖不需要写版本号,SpringBoo有自己的版本控制器(版本控制中心),不需要开发人员维护各个依赖jar的版本,还可以防止版本冲容

banner图:

在resources文件下新建File,命名为banner.txt,在里面粘贴需要显示的banner图。

SpringBoot邮件发送

porm.xml中需求的依赖

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

yml中的属性配置

spring:
  mail:
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 发送者邮箱
    username: 1053886691@qq.com
    # 配置密码,注意不是真正的密码,而是刚刚申请到的授权码
    password: lcrjkwdqzvrdbbac
    # 端口号465或587
    port: 587
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true

组件写法

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Created on 2021/7/15.
 * <p>
 * Author : Lcywings
 * <p>
 * Description :
 */
@Component
public class SendMailSms implements SendMail {

    @Autowired
    JavaMailSender javaMailSender;

    public void send() {
        // 构建一个邮件对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置邮件主题
        message.setSubject("KH-89-马珏浩");
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        message.setFrom("1053886691@qq.com");
        // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
        // message.setTo("10*****16@qq.com","12****32*qq.com");
        message.setTo("1098468483@qq.com");
        // 设置邮件抄送人,可以有多个抄送人
        message.setCc("1053886691@qq.com");
        // 设置隐秘抄送人,可以有多个
        message.setBcc("1053886691@qq.com");
        // 设置邮件发送日期
        message.setSentDate(new Date());
        // 设置邮件的正文
        message.setText("使用SpringBoot的Mail启动器发邮件成功!");
        // 发送邮件
        javaMailSender.send(message);
    }
}

Q.E.D.