Comment implémenter la configuration automatique SpringBoot
springboot如何实现
在之前的 helloworld 示例中,已经初步体会到 springboot 自动导入依赖、完成配置的爽快了。
那么,springboot 是如何实现的呢?
一、依赖管理特性
先看下上一篇内容示例中的pom.xml:
<!--导入父工程--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
这里添加了一个父项目,另外只导入了一个依赖spring-boot-starter-web,最后我们所有相关的包就进来了。
整个过程中,无需关心导包问题。
1. 父项目
每一个 springboot 工程都有一个父项目,一般都是用来做依赖管理的。
父项目中可能会申明很多的依赖,那么子项目只要继承了父项目,后续在添加依赖的时候就不需要添加版本号了。
以上述为例,父项目使用的是2.3.4.RELEASE的 springboot 版本,所以下面添加的依赖,就无需再写版本号。
(1)父项目如何管理版本
可以按住ctrl,然后单击这个父项目进入一探究竟。
进来后发现他也有一个父项目spring-boot-dependencies。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent>
继续进入到spring-boot-dependencies,在下面可以看到一个properties标签:
这里几乎声明了全部我们在开发中可能会用到的 jar 包的版本。
继续往下可以看到具体的依赖管理dependencyManagement,这里引用的就是properties里申明的版本。
举个例子:
左侧我看到有个包是logback,那么就在里面搜索下,发现这里定义好的版本就是1.2.3。
所以说,父项目的主要功能就是依赖管理,几乎声明了开发中常用的依赖的版本号。
(2)使用指定的版本
如果不要使用自动仲裁出的版本,而使用指定版本也是可以的。
比如 mysql 版本,自动仲裁的结果是8.0.21,但是我只想用5.1.43的版本。
添加一个properties标签,在里面申明版本即可。
<properties> <mysql.version>5.1.43</mysql.version> </properties>
再看下导入的依赖,就已经变成指定的版本了。
2. 场景启动器
再来看下最开始导入的一个依赖spring-boot-starter-web:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
后续会见到更多的以spring-boot-starter命名的启动器。在官方文档里也有详细的说明
什么是 starter?
starter 一组需要依赖的集合描述,也就是通常我们只需要引入一个 starter,那么对应的整个开发场景就会引入了。
比如想开始使用 Spring 和 JPA 进行数据库访问,那么就在项目中引入spring-boot-starter-data-jpa依赖项。
另外,注意这里spring-boot-starter-*开头的是官方的启动器命名方式。
这么说还有非官方的?是的,如果你觉得官方给你的 starter 场景还是不能满足你的使用需要,那么你可以自定义 starter。
但是官方推荐自定义的命名方式使用thirdpartyproject-spring-boot-starter。
至于为什么只导入一个 starter 就可以导入整个场景的依赖,其实还是跟上面父项目一样,maven 的依赖特性。
进入到spring-boot-starter-web,往下翻,就可以看到开发 web 场景所用到的依赖了。
所以,以后需要开发哪个场景,只要参考官方文档导入对应的启动器即可。
二、自动配置
这里再回顾一下之前的 helloworld 项目中,springboot 自动配置好了哪些东西:
自动配好 tomcat
自动配好 springMVC
自动配好 web 常见功能,比如:字符编码问题
默认的包结构:主程序所在包以及下面所有子包里的组件都会被默认扫描
各种配置拥有默认值
按需加载所有自动配置项
......
1. 自动配置组件
不管自动配置好什么,步骤都是:先引入、再配置。
比如 tomcat,那么前提是先引入了 tomcat 依赖,这就由上面第一部分内容所讲的依赖管理完成,在引入了 web starter 后,自动引入场景。
自动引入了场景,也就引入了这个场景下所用到的各种 jar 包,接下来就是要配置这些内容,比如 tomcat、springMVC 等等。
拿 springMVC 举例,在之前要使用 springMVC,肯定要配置DispatcherServlet,帮我们拦截所有请求。
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springMVC.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
现在看下之前的 helloworld 应用中,springboot 是在哪里帮我们做好配置的。
先看主程序类:
// 标记这是一个 springboot应用,这个类是主程序类,所有启动的入口 @SpringBootApplication public class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); } }
可以创建个本地变量(alt+enter),可以看到这个是个ConfigurableApplicationContext类型。
@SpringBootApplication public class MainApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); } }
可以使用getBeanDefinitionNames()方法,查看里面包含了哪些容器,遍历打印出来。
@SpringBootApplication public class MainApplication { public static void main(String[] args) { // 返回IOC容器 final ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); // 查看容器里的组件 final String[] beanDefinitionNames = run.getBeanDefinitionNames(); for (String name: beanDefinitionNames) { System.out.println(name); } } }
接下来启动应用,看下控制台输出。
在控制台输出里ctrl+F搜索下DispatcherServlet:
发现 IOC 容器中已经有了对应的组件。
2. 默认的包结构
主程序所在包以及下面所有子包里的组件都会被默认扫描,所以我们不需要配置开启组件扫描,也可以正常使用。
但是要注意这里的范围:
示例中就是com.pingguo.boot包下以及所有子包都可以自动扫描。
如果你就是要放到外面,还希望被扫描到,怎么办?
那么可以使用主程序类中@SpringBootApplication注解中的一个属性scanBasePackages,扩大包的范围即可:
@SpringBootApplication(scanBasePackages = "com.pingguo") public class MainApplication { public static void main(String[] args) { ... ...
3. 各种配置拥有默认值
比如 tomcat端口,在application.properties配置文件里使用 idea 输入的时候,就可以看到带有默认值8080:
点击进去可看到后面都是绑定了对应的 java 类。
配置文件的值最终会绑定在对应的类上,这个类会在容器中创建对象。
4. 按需加载所有自动配置项
比如应用中只引入了spring-boot-starter-web,那么就只有web场景的自动配置才会开启。
springboot 中的所有自动配置,都在这里:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
点击spring-boot-starter-web可以找到spring-boot-starter,再进入其中就可以看到spring-boot-autoconfigure。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





Introduction à Jasypt Jasypt est une bibliothèque Java qui permet à un développeur d'ajouter des fonctionnalités de chiffrement de base à son projet avec un minimum d'effort et ne nécessite pas une compréhension approfondie du fonctionnement du chiffrement. Haute sécurité pour le chiffrement unidirectionnel et bidirectionnel. technologie de cryptage basée sur des normes. Cryptez les mots de passe, le texte, les chiffres, les binaires... Convient pour l'intégration dans des applications basées sur Spring, API ouverte, pour une utilisation avec n'importe quel fournisseur JCE... Ajoutez la dépendance suivante : com.github.ulisesbocchiojasypt-spring-boot-starter2 1.1. Les avantages de Jasypt protègent la sécurité de notre système. Même en cas de fuite du code, la source de données peut être garantie.

Scénario d'utilisation 1. La commande a été passée avec succès mais le paiement n'a pas été effectué dans les 30 minutes. Le paiement a expiré et la commande a été automatiquement annulée 2. La commande a été signée et aucune évaluation n'a été effectuée pendant 7 jours après la signature. Si la commande expire et n'est pas évaluée, le système donne par défaut une note positive. 3. La commande est passée avec succès. Si le commerçant ne reçoit pas la commande pendant 5 minutes, la commande est annulée. 4. Le délai de livraison expire et. un rappel par SMS est envoyé... Pour les scénarios avec des délais longs et de faibles performances en temps réel, nous pouvons utiliser la planification des tâches pour effectuer un traitement d'interrogation régulier. Par exemple : xxl-job Aujourd'hui, nous allons choisir

1. Redis implémente le principe du verrouillage distribué et pourquoi les verrous distribués sont nécessaires. Avant de parler de verrous distribués, il est nécessaire d'expliquer pourquoi les verrous distribués sont nécessaires. Le contraire des verrous distribués est le verrouillage autonome. Lorsque nous écrivons des programmes multithreads, nous évitons les problèmes de données causés par l'utilisation d'une variable partagée en même temps. Nous utilisons généralement un verrou pour exclure mutuellement les variables partagées afin de garantir l'exactitude de celles-ci. les variables partagées. Son champ d’utilisation est dans le même processus. S’il existe plusieurs processus qui doivent exploiter une ressource partagée en même temps, comment peuvent-ils s’exclure mutuellement ? Les applications métier d'aujourd'hui sont généralement une architecture de microservices, ce qui signifie également qu'une application déploiera plusieurs processus si plusieurs processus doivent modifier la même ligne d'enregistrements dans MySQL, afin d'éviter les données sales causées par des opérations dans le désordre, les besoins de distribution. à introduire à ce moment-là. Le style est verrouillé. Vous voulez marquer des points

Springboot lit le fichier, mais ne peut pas accéder au dernier développement après l'avoir empaqueté dans un package jar. Il existe une situation dans laquelle Springboot ne peut pas lire le fichier après l'avoir empaqueté dans un package jar. La raison en est qu'après l'empaquetage, le chemin virtuel du fichier. n’est pas valide et n’est accessible que via le flux Read. Le fichier se trouve sous les ressources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Lorsque Springboot+Mybatis-plus n'utilise pas d'instructions SQL pour effectuer des opérations d'ajout de plusieurs tables, les problèmes que j'ai rencontrés sont décomposés en simulant la réflexion dans l'environnement de test : Créez un objet BrandDTO avec des paramètres pour simuler le passage des paramètres en arrière-plan. qu'il est extrêmement difficile d'effectuer des opérations multi-tables dans Mybatis-plus. Si vous n'utilisez pas d'outils tels que Mybatis-plus-join, vous pouvez uniquement configurer le fichier Mapper.xml correspondant et configurer le ResultMap malodorant et long, puis. écrivez l'instruction SQL correspondante Bien que cette méthode semble lourde, elle est très flexible et nous permet de

SpringBoot et SpringMVC sont tous deux des frameworks couramment utilisés dans le développement Java, mais il existe des différences évidentes entre eux. Cet article explorera les fonctionnalités et les utilisations de ces deux frameworks et comparera leurs différences. Tout d’abord, découvrons SpringBoot. SpringBoot a été développé par l'équipe Pivotal pour simplifier la création et le déploiement d'applications basées sur le framework Spring. Il fournit un moyen rapide et léger de créer des fichiers exécutables autonomes.

1. Personnalisez RedisTemplate1.1, mécanisme de sérialisation par défaut RedisAPI. L'implémentation du cache Redis basée sur l'API utilise le modèle RedisTemplate pour les opérations de mise en cache des données. Ici, ouvrez la classe RedisTemplate et affichez les informations sur le code source de la classe. Déclarer la clé, diverses méthodes de sérialisation de la valeur, la valeur initiale est vide @NullableprivateRedisSe

Cet article écrira un exemple détaillé pour parler du développement réel de dubbo+nacos+Spring Boot. Cet article ne couvrira pas trop de connaissances théoriques, mais écrira l'exemple le plus simple pour illustrer comment dubbo peut être intégré à nacos pour créer rapidement un environnement de développement.
