springboot原理实战(12)--扫描包,banner,配置属性默认值的3种方式

简介: springboot原理实战(12)--扫描包,banner,配置属性默认值的3种方式

目录概要:


本文是springoot的扩展分析补充,主要了解一些springboot扫码包,排除包,banner设置,和配置默认属性这3方面的知识。

脑图:

1dc618a0ed9580ce8bfa6facb208c08f.png


一、SpringBootApplication扫描包:


有几个属性:


exclude根据类排除扫描的类

excludeName根据类名排除扫描的类

scanBasePackages:指定扫描的基本包的位置,可以指定多个包名进行扫描,默认是扫描入口类所在包和子包下面。

scanBasePackageClasses:可以指定多个类或接口的class,扫描时会 在这些指定的类和接口所属的包进行扫面。

排除的以前提到过,下面看下scanBasePackages:


①添加扫描包


例子:

入口类在demo1下

46a9d80a6e05e4e3b19d57a0ee70bcdf.png


User和demo1平级,不在DemoApplication的当前包和子包:


package com.example;
import org.springframework.stereotype.Component;
@Component
public class User {
}


我们看下能否获取User对象:


@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getBean(User.class));
        context.close();
    }


运行结果显示报错:


1dc618a0ed9580ce8bfa6facb208c08f.png


现在用scanBasePackages添加扫描包的位置:


@SpringBootApplication(scanBasePackages="com.example")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getBean(User.class));
        context.close();
    }
 }


运行结果:


5d4c6812c8535adbb050f4ddf2e1bce8.png

已经显示注入spring了。


②排除指定的类,配置类


exclude 根据class来排除 GsonAutoConfiguration.class

excludeName 根据类名类排除 org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration

我们知道GsonAutoConfiguration已经帮我们注入Gson了。


@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getBean(Gson.class));
        context.close();
    }
 }


现在我们去排除它,通过exclude 。


@SpringBootApplication(exclude =  GsonAutoConfiguration.class)
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getBean(Gson.class));
        context.close();
    }
 }


显示已经排除:


46a9d80a6e05e4e3b19d57a0ee70bcdf.png


二、启动banner相关


刚才的项目可以看到启动banner:

1dc618a0ed9580ce8bfa6facb208c08f.png

这个banner,其实有个对应的Banner接口

5d4c6812c8535adbb050f4ddf2e1bce8.png

可以控制禁用off,打印console默认的,log 将banner写入日志文件中。

想用使用的话。2种方式:


代码种禁用或打入日志或者控制台输出

46a9d80a6e05e4e3b19d57a0ee70bcdf.png

可以自定义banner,在resoures目录下,建个txt或者图片,支持jpg png gif,然后根据下面的配置项配置即可。

66ba272a0bfc97be54a5fa679e3d5482.png


三、给springboot 设置默认值的3种方式


第一种方式:冒号凡是

//给默认值1
    @Value("${server.host:192.168.157.112}")
    private String  serverHost;


第二种方式getProperty

public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getEnvironment().getProperty("server.host","aaa"));
 }


第三种方式;app.setDefaultProperties


@SpringBootApplication
public class DemoApplication {
    @Value("${server.host}")
    private String  serverHost;
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(DemoApplication.class);
        Map<String, Object> defaultProperties = new HashMap<>();
        defaultProperties.put("server.host", "192.168.157");
        app.setDefaultProperties(defaultProperties);
        ConfigurableApplicationContext context = app.run(args);
        System.out.println(context.getBean(DemoApplication.class).serverHost);
        context.close();
    }
}


运行结果:


1dc618a0ed9580ce8bfa6facb208c08f.png



相关文章
|
29天前
|
XML Java 开发者
Spring Boot开箱即用可插拔实现过程演练与原理剖析
【11月更文挑战第20天】Spring Boot是一个基于Spring框架的项目,其设计目的是简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供约定优于配置的理念,减少了大量的XML配置和手动设置,使得开发者能够更专注于业务逻辑的实现。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,为开发者提供一个全面的理解。
29 0
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
48 0
|
19小时前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
26 14
|
23天前
|
Java Spring
SpringBoot入门 - 定制自己的Banner
SpringBoot入门 - 定制自己的Banner
15 2
SpringBoot入门 - 定制自己的Banner
|
23天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
40 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
43 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
Java Spring
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
56 17
|
22天前
|
Java 容器
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
|
25天前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
25 3
|
26天前
|
Java Spring
SpringBoot入门(5) - 定制自己的Banner
SpringBoot入门(5) - 定制自己的Banner
11 0
 SpringBoot入门(5) - 定制自己的Banner