博客园 图灵学院spring boot学习1

 1、整个代码如下

 parent是工程,base是子工程

 我们来看看父工程的pom依赖

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tuling.springboot</groupId>
    <artifactId>vip-springboot-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>vip-springboot-parent</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-parent</artifactId>
                <version>1.5.10.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.tuling.springboot.base.SpringBootStart</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <modules>
        <module>vip-springboot-base</module>
    </modules>
</project>

 首先父亲工程的类型是pom类型进行jar包的管理,所以类型为

<groupId>com.tuling.springboot</groupId>
    <artifactId>vip-springboot-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

其次父亲工程要进行jar的管理,这里如何管理的了,引入了spring boot的依赖,让spring boot的parent去管理真正的jar包

<dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-parent</artifactId>
                <version>1.5.10.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
<type>pom</type>这里表示parent工程中引入的dependency不是我们平常使用的jar,而是一个pom依赖,真正的jar包管理是spring-boot-parent帮助我们实现

import 它只使用在<dependencyManagement>中,表示从其它的pom中导入dependency的配置

接下来我们来看base子项目的依赖

<?xml version="1.0"?>
<project
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.tuling.springboot</groupId>
        <artifactId>vip-springboot-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>vip-springboot-base</artifactId>
    <name>vip-springboot-base</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--         <dependency> -->
<!--             <groupId>org.springframework</groupId> -->
<!--             <artifactId>springloaded</artifactId> -->
<!--         </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
    </dependencies>
</project>

这里base要是web模块,引入下面的

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

要引入单元测试,只需要引入下面的starter

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

要进行热加载,修改代码之后不用重启,引入下面的模块

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

上面就是整个springboot的依赖关系

接下来,我们来看下springboot的启动分析

package com.tuling.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class SampleController {

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

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

 现在有上面的这个类SampleController ,在改类上使用了@Controller和@EnableAutoConfiguration注解,改类我们是可以直接运行的

@EnableAutoConfiguration类默认会扫描当前@EnableAutoConfiguration所在类的注解添加到应用上下文中,@EnableAutoConfiguration会扫描到SampleController 存在@control注解,这样在浏览器就可以http://localhost:8080/访问到了"Hello World!"

如果把上面的类写成下面的形式,如果@EnableAutoConfiguration与@control注解不再一个类中,@EnableAutoConfiguration默认只能扫描自己所属类中存在的注解,所以扫描不到其他类中的注解,@EnableAutoConfiguration要扫描到其他类中存在的注解,需要引入@ComponentScan(basePackages={"com.tuling.springboot"}),指定

@EnableAutoConfiguration能够扫描到那些包下面的注解

package com.tuling.springboot.base;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableAutoConfiguration
@ComponentScan(basePackages={"com.tuling.springboot"})
public class SpringBootStart {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootStart.class, args);
    }
}

接下来讲讲@SpringBootConfiguration:他继承@Configuration,说明这是一个配置类,什么是配置类呢?就相当于我们spring中以前写的xml配置,例如我们我们的bean标签,用来实例化一个bean。那么在这个配置类中就是实现以前我们xml配置的功能,因此我们就可以在@SpringBootConfiguration所在的类中定为定义bean对象添加到spring容器中,代码如下所示

package com.tuling.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
@SpringBootConfiguration
public class SampleController {

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

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
    
    @Bean
    public AA sb(){
        
        new AA();
    }
}

我们就可以将一个AA对象的实例注册到spring的容器中

接下来我们讲解@SpringBootApplication注解

package com.tuling.springboot.base;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class SpringBootStart {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootStart.class, args);
    }
}

2.@SpringBootApplication配置详解:
他是一个组合注解,他内部主要包含三个子注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan,因为SpringBootApplication默认包含了ComponentScan注解,默认扫描的是@SpringBootApplication所属类所在的包及其子包的注解,上面的代码就是扫描com.tuling.springboot.base包机器子包,我们也可以手动指定要扫描的包

package com.tuling.springboot.base;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@ComponentScan(basePackages={"com.example.boot"}) 
public class SpringBootStart {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootStart.class, args);
    }
}

总结如下:

spring boot 启动注解分析
1.@EnableAutoConfiguration:开启自动配置功能
@ComponentScan(basePackages={"com.example.boot"}) 包扫描


2.@SpringBootApplication配置详解:
他是一个组合注解,他内部主要包含三个子注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

@SpringBootConfiguration:他继承@Configuration,说明这是一个配置类,什么是配置类呢?就相当于我们以前写的xml配置,例如我们我们的bean标签,用来实例化一个bean。那么在这个配置类中就是实现以前我们xml配置的功能

@EnableAutoConfiguration:开启自动配置功能,他会扫描带有@Configuration的类,然后初始化这些配置类中的信息并且加入到应用上下文中去,同时完成一些基本的初始化工作

@ComponentScan:组件包扫描,也就是我现在需要扫描哪些包下面的注解,可自动发现和装配一些bean。默认扫描当前启动类所在包下面的类和下面的所有子包
原文地址:https://www.cnblogs.com/kebibuluan/p/11693208.html