SpringBoot入门必看(一)

SpringBoot详细整理必看

SpringBoot是一个自动配置,开箱即用的生产级的基于Spring的应用程序,无需繁琐的配置文件,即可搭建Web环境,将每个组件封装为各类启动器,需要用时则添加。只需很少的配置,可以修改默认配置

Starters

在我们初始入门时候都会快速体验使用如下pom.xml文件

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>版本号</version>
</parent>

这是一个父级启动器,SpringBoot 中含有大量 Starters,你可以获取所有服务组件。SpringBoot 官方提供的Starters 以 spring-boot-starter-* 命名

main类

SpringBoot 在配置完父级 Starter 后,提供一个含有 @EnableAutoConfiguration 的注解的类,我们应该将该类放置在你的应用代码所在包的上层包中。SpringBoot会将该注解的类下所有包都进行扫描,以找到所有的 @ComponentScan@Service 等注解

在主配置类上配置@ComponentScan 注解,它会将该类所在包以下的所有含有@Service,@Component等注解的bean注入到容器中

添加自动配置类注解@Configuration

@Configuration 标注的类会把方法返回的bean注入到容器中,其实不用**@Configuration标注的类中如果方法都由@Bean 注解标注,那么也是可以将这些bean注入容器中的,加不加@Configuration注解区别在于加了@Configuration**的类中的方法被其他方法执行过一次后即会被注入带容器中,不用再次注入

@Configuration
public class MyConfig {

    @Bean
    public BeanOne one(){
        return new BeanOne(1);
    }

    @Bean
    public BeanTwo two(){
        one();
        return new BeanTwo(2);
    }
}

这是一个自定义的配置类,用于向容器注入两个bean,其中two()方法内执行了one() 方法

public class BeanOne {

    private int id;

    public BeanOne(int id){
        System.out.println("BeanOne初始化...");
        this.id = id;
    }
}

public class BeanTwo {

    private int id;

    public BeanTwo(int id){
        System.out.println("BeanTwo初始化...");
        this.id = id;
    }
}

如果加了 @Configuration 注解,BeanOne只执行一次初始化,否则会执行两次初始化。而且加@Configuration注解明显标志这个bean为配置bean

@SpringBootApplication

在上述中主配置类上配置了@Controller,@EnableAutoConfiguration@ComponentScan三个注解,可以使用@SpringBootApplication来替换这三个注解,它们的功能等价

运行程序jar包

在pom.xml配置文件中添加插件

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BTqw2uTc-1589626159811)
在这里插入图片描述

点执行package 或执行mvn package命令,就可以在target目录下看到***-0.0.1-SNAPSHOT.jar**文件,执行java -jar *-0.0.1-SNAPSHOT.jar就可以运行jar程序

配置文件

配置文件可以是 properties,也可以是 yaml

配置文件位置:

  • file:./config/
  • file:./
  • classpath:/config/
  • classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的相同配置;不同的配置间互不影响,四处的文件都可以被读取,进行互补配置

配置文件取值

当在application.yml中配置了:

name: ${random.value}

在bean中的属性上使用@Value 注解

public class BeanOne {

    @Value("${name}")
    private String name;

这样在取出BeanOne时,就会将看到name属性已经有一个随机值了

使用@ConfigurationProperties 注解指定前缀 prefix = “app”

@ConfigurationProperties(prefix = "app")
@Component
public class BeanProperties {

    String name;
    boolean gender;
    List<String> list;
    Map<String,Object> map;
    BeanOne one;
  
    //setter and getter

对应的配置文件:

app:
  name: 张三
  gender: true
  list:
    - hello
    - haha
  map:
    abc: 123
    dfg: 456
    thu: 789
  one:
    name: ${random.value}

@ConfigurationProperties 注解也可以用在返回一个bean的public @Bean方法上,从环境中取出值赋给返回的bean

@ConfigurationProperties(prefix = "beanvalue")
@Bean
public BeanValue beanValue(){
    ...
}

在类上指定注解@PropertyResource,使用指定位置的配置文件取值

@PropertyResource(value = {"classpath:app.yml"})
@ConfigurationProperties(prefix = "app")
@Component
public class BeanProperties {
@Profile

Spring Profiles 提供了一种分离应用程序配置的方法,在指定的环境才能使用指定的配置文件。

任何配置类无论是标注了 @Configuration 注解还是标注了 @Component 注解等,都可以在类上标注 @Profile 注解,指明该配置类只有该环境才能被加载使用

@Configuration
@Profile("one")
//@Component
public class MyConfig {
spring:
  profiles:
    active: one

Web开发

自动配置

SpringBoot为Spring MVC提供了大量的自动配置 auto-configuration ,SpringBoot在原来Spring MVC的基础上开启了以下配置

  1. 引入ContentNegotiatingViewResolver和BeanNameViewResolver beans。
  2. 对静态资源的支持,包括对WebJars的支持。
  3. 自动注册Converter,GenericConverter,Formatter beans。
  4. 对HttpMessageConverters的支持。
  5. 自动注册MessageCodeResolver。
  6. 对静态index.html的支持。
  7. 对自定义Favicon的支持。
  8. 自动使用ConfigurableWebBindingInitializer bean。

如果想我们自己再配置其他MVC配置,例如配置一个拦截器。只需在你的Configuration类里注入一个WebMvcConfigurerAdapter 并且不使用 @EnableWebMvc 注解

@Configuration
public class MvcConfig {

    @Bean
    public WebMvcConfigurerAdapter mvcIntercepted() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                super.addInterceptors(registry);
                registry.addInterceptor(new MyInterceptor());
            }
        };
    }
}

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if("/hello".equals(request.getServletPath())){
            System.out.println("拦截器拦截到hello请求");
            return false;
        }
        return true;
    }
}

当发送/hello请求时,拦截器会拦截该请求,并打印消息

WebMvcConfigurerAdapter 被Spring弃用了,可以让配置bean 实现 WebMvcConfigurer

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值