SpringBoot 概念 + 实操

106 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1.概念

  • 约定大于配置
  • 按条件配置Bean
  • @SpringBootApplication= @ComponentScan+@Configuration+@EnableAutoConfiguration

1.1元注解

@Retention(注解保留的位置)

  • @Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
  • @Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获
  • @Retention(RetentionPolicy.RUNTIME) 注解会在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文档中)

1.2全局配置文件

  • application.properties
  • application.yml

1.3自动配置运行原理(参照源码)

@SpringBootApplication》EnableAutoConfiguration》AutoConfigurationImportSelector》getCandidateConfigurations》SpringFactoriesLoader》META-INF/spring.factories

由@Import提供,其导入的AutoConfigurationImportSelector的selectImports()方法通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/Spring.factories的jar包。spring-boot-autoconfigure-x.x.x.x.jar里面就有一个spring.factories文件。

2.应用

2.1 SpringBoot核心maven依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    <dependencies>

主方法,运行则启动tomcat

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

2.2 Springboot 部署(本质是一个java程序)

采用两种方式:打包成jar,打包成为war jar方式 cd C:\Users\X7TI\Downloads\springboot mvn install 启动 java -jar target/springboot-0.0.1-SNAPSHOT.jar war方式 主方法继承SpringBootServletInitializer,并加@ServletComponentScan注释

@SpringBootApplication
@ServletComponentScan
public class Application extends SpringBootServletInitializer

pom.xml <packaging>war</packaging>(打包成war方式) 添加tomcat依赖,scope属性改为provided,避免和独立tomcat冲突

 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        	<scope>provided</scope>           
        </dependency>

创建war包 mvn clean package

2.3 热部署(自启动)

注:pom文件中增加了jar包的依赖,热部署失效,得手动重启) 在pom文件增加一个devtools依赖和maven插件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>

2.4多配置文件

在application.properties配置文件中命名 spring.profiles.active=pro 部署的时候应用 java -jar target/springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=pro

2.5 持久层

基于hibernate的JpaRepository,接口DAO继承JpaRepository,就提供CRUD、分页操作,不需要写SQL。 Mybatis数据库连接配置参数

<!--视图定位-->
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
<!--数据库配置-->
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
<!--映射xml文件路径-->
mybatis.mapper-locations=classpath:com/how2java/springboot/mapper/*.xml
<!--指定别名-->
mybatis.type-aliases-package=com.how2java.springboot.pojo

pom增加依赖

<!-- mybatis -->
<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>1.1.1</version>
</dependency>
<!-- mysql -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.21</version>
</dependency>

2.6 实现CRUD

pagehelper分页依赖,写pagehelper配置类,Mapper(方法上用注解实现SQL),Controller控制类,调用Mapper接口实现增删改查,利用pagehelper进行分页操作

2.7 单元测试

添加Junit依赖,写测试类,类上增加@RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class)两个注解,调用方法显示数据

2.8 Restful风格

@GetMapping(查询) @PostMapping(修改) @DeleteMapping(删除) @PutMapping(增加)

2.9 Redis

添加pom依赖,properties文件配置,主方法上增加注解@EnableCaching开启缓存,写缓存配置类