SpringBoot_学习笔记

1.Spring与SpringBoot区别

2.创建SpringBoot项目

2.1 通过maven的方式创建

2.1.1 maven设置

给maven 的settings.xml配置文件的profiles标签添加

<profile>
  <id>jdk-1.8</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>1.8</jdk>
  </activation>
  <properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
  </properties>
</profile>

2.1.2 创建一个maven工程,导入springboot依赖

<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>

2.1.3 编写一个主程序;启动Spring Boot应用

/**
 *  @SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
 */
@SpringBootApplication
public class HelloWorldMainApplication {
    
    

    public static void main(String[] args) {
    
    

        // Spring应用启动起来
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

2.1.4 编写相关的Controller、Service

@Controller
public class HelloController {
    
    

    @ResponseBody
    @RequestMapping("/hello")
    public String hello(){
    
    
        return "Hello World!";
    }
}

运行主程序测试

2.2 通过spring initializr向导创建

2.3 通过官网下载导入

3.简化部署

要创建可执行jar,我们需要将spring-boot-maven-plugin添加到pom.xml。

<!-- 这个插件,可以将应用打包成一个可执行的jar包;-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

将这个应用打成jar包,直接使用java -jar的命令进行执行;

4.导入配置文件处理器

导入后编写配置文件就会有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

其实这个配置文件处理器只是在编写的时候起到提示作用,在打包运行时并不需要,所以为了不必要的类,可以再添加如下配置来排除

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

5.容器功能

5.1 组件添加

关联spring装配机制

5.1.1 使用@Configuration添加组件

不用beans.xml的配置文件方式向容器中添加bean,而是使用配置类的方式
1.配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的;
2. 配置类本身也是组件
3. proxyBeanMethods : 代理bean的方法
Full(proxyBeanMethods = true) ----全模式 【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
Lite(proxyBeanMethods = false) ----轻量模式【每个@Bean方法被调用多少次返回的组件都是新创建的】

  1. @Configuration(proxyBeanMethods=true) : 默认是true,表示配置类在容器中是以代理对象的方式存在的; bean是代理对象创建的;(代理对象每次都会在容器中找bean,有就拿,没有就创建)
  2. Full: 配置列之间有依赖关系,方法会调用得到单实例组件,用Full模式
  3. Lite : 配置类之间无依赖关系,加速容器启动过程,(不需要判断);

5.1.2 使用@Controller,@Service,@Repository,@Component

5.1.3 使用@ComponentScan、@Import

这两个注解标注在容器中的组件类上
@Import : 可以导入第三方组件

5.1.4 @Conditional 满足指定条件才能装配

5.1.5 @ImportResource 导入资源

@ImportResource("classpath:beans.xml")  //导入spring的配置文件

5.2 配置绑定

5.2.1 @ConfigurationProperties

组要配合@Component注解组合(必须将组件放进容器中)

@Component   //只有在容器中的组件才会拥有spring提供的功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
    
    
    private String name;
    private Double price;
    ...
}
mycar.price=1000
mycar.name=byd

5.2.2 @ConfigurationProperties+ @EnableConfigurationProperties

这种组合必须放在配置类上,因为配置类属于容器中的组件;
@EnableConfigurationProperties的作用:1.开启组件的配置绑定功能;2.把组件注册到容器中
所以这种方式组件上不在需要标注@Component也会被容器管理;

//@Component   //只有在容器中的组件才会拥有spring提供的功能
@ConfigurationProperties(prefix = "mycar")
public class Car {
    
    
    private String name;
    private Double price;
    ...
}
//配置类
@Configuration
@EnableConfigurationProperties(Car.class) //开启Car的配置绑定功能;把Car注册到容器中
public class MyConfig {
    
    
}    

6.自动配置原理

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

6.1 引导加载自动配置类

@SpringBootApplication==>

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
    
     @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{
    
    }

6.1.1 @SpringBootConfiguration : 这个注解底层是@Configuration,所以它的作用代表主程序启动类是一个配置类;

6.1.2 @ComponentScan : 指定扫描哪些

6.1.3 @EnableAutoConfiguration :

@AutoConfigurationPackage
@Import({
    
    AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    
    

6.1.3.1 @AutoConfigurationPackage(自动配置包)

@Import({
    
    Registrar.class})
public @interface AutoConfigurationPackage {
    
    

底层给容器导入了一个Registrar组件,利用Registrar给容器导入了一系列组件(将指定包下的所有组件导入进来(Main程序所在包))

6.1.3.2 @Import({AutoConfigurationImportSelector.class})

6.2 按需开启自动配置项

6.3 定制化修改自动配置

猜你喜欢

转载自blog.csdn.net/qq_40084325/article/details/111625954
今日推荐