实现Springboot的自动装配

news2024/12/28 17:41:41

首先我们有一个模块叫testOne
该模块就只定义一个类UserService。
我们要将UserService自动装配到Springboot中。
一下是testOne的各个文件。
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hy</groupId>
    <artifactId>testOne</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>testOne</name>
    <description>testOne</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.7.9</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

UserService类

package com.hy.testone.service;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix ="com.hy" )
public class UserService {
    public String sex;
    public String name;
    public int age;

    public String getSex() { return sex;  }
    public void setSex(String sex) { this.sex = sex; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

代码结构如下
在这里插入图片描述
至此,我们一个模块已经建设好了。
接下来我们开始实现将UserService自动装配到Springboot中。
1.在resource下新建META-INF文件夹。
2.META-INF文件夹下新建spring.factories文件。文件内容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.hy.testone.service.UserService

3.新建一个springboot项目名为testTwo,在main函数中调用UserService。在这里插入图片描述我们将testTwo在maven中引用testOne模块以下为testTwo 的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    
    <groupId>org.bobo</groupId>
    <artifactId>testTwo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>8</java.version>
    </properties>

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

        <dependency>
            <groupId>com.hy</groupId>
            <artifactId>testOne</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

接着在application.xml中定义UserService的属性
在这里插入图片描述
启动项目,即可得到以下结果
在这里插入图片描述
原理:springboot在启动时会去扫描resources/META-INF/sping.factories文件。
里边配置的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration。
value为com.hy.testone.service.UserService。意为允许UserService开启自动装配。当springboot启动时监测到有这个文件是会自动加载value中的类。
他的实现机制是一种SPI机制。

补充:还可以在resources/META-INF文件下添加spring-autoconfigure-metadata.properties文件,内容为

com.hy.testone.config.UserService.ConditionalOnClass=com.hy.testone.condition

效果为在UserService的类上标注了一个@ConditionalOnClass注解。在springboot检测到有com.hy.testone.condition这个类时,才会去加载UserService。在该文件中可以编写各种加载类的限制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1319994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

11.OSPF

OSPF 比较常用的路由协议 主要用在内部网络 它看的是链路的带宽&#xff0c;不仅仅看距离远近 rip收敛较慢&#xff0c;OSPF时间在10秒就可以完成收敛 区域0 表示骨干区域&#xff0c;其他的都是常规区域 ABR&#xff1a;连接骨干区域与常规区域的路由器称为区域边界路由器 r…

【Java】基于fabric8io库操作k8s集群实战(pod、deployment、service、volume)

目录 前言一、基于fabric8io操作pod1.1 yaml创建pod1.2 fabric8io创建pod案例 二、基于fabric8io创建Service&#xff08;含Deployment&#xff09;2.1 yaml创建Service和Deployment2.2 fabric8io创建service案例 三、基于fabric8io操作Volume3.1 yaml配置挂载存储卷3.2 基于fa…

Android Termux安装MySQL数据库并通过内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备&#xff0c;尽管最初并非设计为服务器&#xff0c;但是随着技术的进步我们可以将Android配置为生产力工具&#xff0c;变成一个随身…

针对这两个趋势,3.0全新新零售商业模式可以采取以下策略:

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

041.Python异常处理_初识异常

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

共享门店会在未来新零售占据主角吗?

共享门店作为一种创新的商业模式&#xff0c;在未来新零售领域中可能会占据一定的角色&#xff0c;但具体是否会成为主角&#xff0c;还需要根据市场的发展和技术的进步来判断。 首先&#xff0c;共享门店模式通过资源共享、风险共担、客户共享和收益共享等方式&#xff0c;为…

手机大厂的自由窗口freeform功能基于aosp14/安卓14适配完成-千里马android framework实战开发

背景 hi&#xff0c;粉丝朋友们&#xff1a; 今年2023年已经块过去了&#xff0c;各个手机厂商已经开始适配aosp14&#xff0c;甚至有的是已经适配完成&#xff0c;明年市场就大部分手机出厂就都是android 14了。 近期有个马哥学员刚好求助马哥一个关于以前马哥课程里面自由窗…

2.初始化Server、Common工程

1.初始化项目结构 1.1 工程依赖关系 1.2 根pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation…

vue3使用vue-router嵌套路由(多级路由)

文章目录 1、Vue3 嵌套路由2、项目结构3、编写相关页面代码3.1、编写route文件下 index.ts文件3.2、main.ts文件代码&#xff1a;3.3、App.vue文件代码&#xff1a;3.4、views文件夹下的Home文件夹下的index.vue文件代码&#xff1a;3.5、views文件夹下的Home文件夹下的Tigerhh…

Android通过listview实现输入框自定义提示栏(代替AutoCompleteTextView自动完成文本框)

效果图 背景 本人因为一些需求初次接触android&#xff0c;需要实现一个类似android自带的AutoCompleteTextView&#xff08;自动完成文本框&#xff09;&#xff0c;但和其不同的是通过后端接口直接筛选数据&#xff08;自己的分词处理规则&#xff09;&#xff0c;然后返回前…

【LeetCode刷题笔记(5)】【Python】【盛最多水的容器】【双指针】【中等】

文章目录 盛最多水的容器算法题描述示例示例 1示例 2 提示题意拆解 解决方案&#xff1a;【双指针】运行结果复杂度分析 结束语 盛最多水的容器 盛最多水的容器 算法题描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (…

虚拟展会展览如何搭建,虚拟展会展览有哪些优势

引言&#xff1a; 随着科技的不断进步&#xff0c;虚拟展会展览正逐渐成为企业推广和交流的新方式。那么虚拟展会展览应该如何搭建&#xff0c;虚拟展会展览又能带来哪些好处呢&#xff1f; 一.什么是虚拟展会展览 虚拟展会展览是一种通过网络平台进行的展览&#xff0c;与传…

制作RK3568 ubuntu20.04桌面版镜像

平台 主控: RK3568 编译主机: Ubuntu 20.04 AMD64 目标版本: Ubuntu 20.04 概述 RK3568是极具性价比的高能国产“芯“ , 是Rockchip面向与AIOT和工业市场打造的一款高性能、低功耗、功能丰富的国产化应用处理器。采用四核64位Cortex-A55架构&#xff0c;主频高达2.0GHz&#x…

数据结构:图文详解 队列 | 循环队列 的各种操作(出队,入队,获取队列元素,判断队列状态)

目录 队列的概念 队列的数据结构 队列的实现 入队 出队 获取队头元素 获取队列长度 循环队列的概念 循环队列的数据结构 循环队列的实现 判断队列是否为空 判断队列是否已满 入队 出队 得到队头元素 得到队尾元素 队列的概念 队列&#xff08;Queue&#xff0…

如何在使用Docker快速部署StackEdit并实现公网访问本地编辑器远程办公

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器&#xff0c;在GitHub上拥有20.7k Star&#xff01;&#xff0c;它支持将Markdown笔记保…

简单好用的图像编辑:Pixelmator Pro直装中文 for Mac

在 Pixelmator Pro 中&#xff0c;您可以找到从亮度、对比度和曝光等基本颜色调整到多通道曲线和基于轮的颜色平衡等高级工具的所有内容。 自动增强照片。 许多最重要的调整可以自动应用&#xff0c;使用经过 2000 万张照片训练的机器学习算法。 完善每一个细节。 神奇地移除…

回收站数据恢复,分享3个可行方法!

“我真的太粗心啦&#xff01;本来想删除一些电脑里不重要的文件&#xff0c;但是不小心把一些很重要的文件一起删除了&#xff0c;这可怎么办呢&#xff1f;我应该通过什么方法找回这些文件呢&#xff1f;” 在使用电脑的过程中&#xff0c;误删文件是很多用户都无法避免的一件…

使用vs code开发microPython,消除库文件报错

使用vs code 写microPython代码的时候&#xff0c;总是遇到库文件报错&#xff0c;也就是类似machine之类的库下面会有波浪线&#xff0c;看起来很是别扭。 前几天在翻看树莓派pico的文档&#xff0c;发现里面提供了很好的方法。 安装vs code环境 $ sudo apt update $ sudo a…

如何在Windows系统上部署VisualSVN并实现远程访问管理界面【内网穿透】

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写&#xff0c;是一个开放源代码的版本控制系统…

eclipse安装astview插件

astview插件可以展示java源码经过词法、语法分析后生成的抽象语法树&#xff08;AST&#xff09;&#xff1a; 在eclipse中安装该插件&#xff0c;见官方&#xff1a;org.eclipse.jdt.astview - AST View | The Eclipse Foundation 我的eclipse版本2020-06&#xff0c;开始使用…