【Spring】idea + maven 从零创建Spring IoC容器示例

【Spring】idea + maven 从零创建Spring IoC容器示例

        • 1. 环境准备
        • 2. 创建maven项目
        • 3. 添加依赖
        • 4. 创建Java类与接口
          • 4.1 定义接口UserService
          • 4.2 实现接口UserServiceImpl
        • 5. 配置Spring IoC容器
        • 6. 编写主类调用IoC容器
        • 扩展:使用注解方式实现IoC
          • 1. 修改beans.xml
          • 2.使用注解标记Bean
        • 小结:

1. 环境准备

idea编辑器
jdk1.8+
maven

2. 创建maven项目

① 打开IDEA → New Project → Maven → Next
② 填写项目信息:
Groupld:vip.buddha
ArtifactId: spring-ioc-demo
Version: 1.0.0
③ 点击Finish,项目结构如下:

spring-ioc-demo
├── src
│   ├── main
│   │   ├── java
│   │   └── resources
│   └── test
│       └── java
└── pom.xml
3. 添加依赖
<dependencies><!-- Spring 基础依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.39</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.39</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.3.39</version></dependency><!-- Spring IoC 核心依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.39</version> <!-- 与 Spring 版本一致 --></dependency>
</dependencies>

手动添加完毕依赖,点击idea右侧maven面板的刷新按钮,下载依赖

4. 创建Java类与接口
4.1 定义接口UserService
package vip.buddha.service;public interface UserService {String getUserName();
}
4.2 实现接口UserServiceImpl
package vip.buddha.service;public class UserServiceImpl implements UserService{@Overridepublic String getUserName() {return "buddha";}
}
5. 配置Spring IoC容器

在src/main/resources下创建beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定义bean --><bean id="userService" class="vip.buddha.service.UserServiceImpl"/>
</beans>
6. 编写主类调用IoC容器
package vip.buddha;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import vip.buddha.service.UserService;public class Main {public static void main(String[] args) {// 1、加载Spring配置文件ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");// 2、从容器中获取beanUserService userService = context.getBean("userService", UserService.class);// 3、调用方法String userName = userService.getUserName();System.out.println(userName);}
}

编写完毕项目结构如下图:

spring-ioc-demo
├── src
│   ├── main
│   │   ├── java
│   │   │   ├── vip.buddha
│   │   │   │   ├── service
│   │   │   │   │   ├── UserService.java
│   │   │   │   │   ├── UserServiceImpl.java
│   │   │   │   ├── Main.java
│   │   └── resources
│   │   │   ├── beans.xml
│   └── test
│       └── java
└── pom.xml
扩展:使用注解方式实现IoC
1. 修改beans.xml

开启组件扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启组件扫描 --><context:component-scan base-package="vip.buddha"/>
</beans>
2.使用注解标记Bean
package vip.buddha.service;import org.springframework.stereotype.Component;@Component("userService") // 等价于 <bean id="userService" .../>
public class UserServiceImpl implements UserService{@Overridepublic String getUserName() {return "buddha";}
}
小结:

IoC核心思想:对象的创建和依赖管理由Spring容器负责,而非手动new

在这里插入图片描述

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

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

相关文章

面试回答之STAR结构

面试回答之STAR结构 1. STAR结构的起源 STAR是行为面试法&#xff08;Behavioral Interview&#xff09;的核心框架&#xff0c;由以下四个单词首字母组成&#xff1a; • Situation&#xff08;情境&#xff09; • Task&#xff08;任务&#xff09; • Action&#xff…

Kubernetes部署运行应用

①使用 Deployment 运行一个无状态应用 ②运行一个单实例有状态应用 ③运行一个有状态的应用程序 ④使用 Persistent Volumes 部署 WordPress 和 MySQL

二叉搜索树的最近祖先(递归遍历)

235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…

网络:TCP三次握手、四次挥手

目录 深刻理解三次握手 深刻理解四次挥手 深刻理解三次握手 三次握手时&#xff0c;如果最后一个ACK包&#xff0c;服务器没有收到&#xff0c;此时&#xff1a; 客户端&#xff1a;认为已经建立链接 服务器&#xff1a;认为没有建立链接&#xff0c;还在超时等待。 而此…

MySQL 实战 45 讲 笔记 ----来源《极客时间》

01 | 基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f; 1. MySQL 可以分为 Server层 和 存储引擎层 两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等。存储引擎层支持 InnoDB、MyISAM等. (1) 连接器&#xff1a;管理连接&#xff0c;权限认证…

nextjs+supabase vercel部署失败

1.不能含有<any> 改成unknown或者增加类(如图) 2.检查vecel是否配置环境变量&#xff08;即supabase的url和anon-key&#xff09;

数据库Mysql_联合查询

或许自己的不完美才是最完美的地方&#xff0c;那些让自己感到不安的瑕疵&#xff0c;最终都会变成自己的特色。 ----------陳長生. 1.介绍 1.1.为什么要进行联合查询 在数据设计的时候&#xff0c;由于范式的需求&#xff0c;会被分为多个表&#xff0c;但是当我们要查询数据…

(37)VTK C++开发示例 ---纹理地球

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 将图片纹理贴到球体上&#xff0c;实现3D地球的效果。 该代码使用了 VTK (Visualization Toolkit) 库来创建一个纹理…

VMware-centOS7安装redis分布式集群

1.部署redis包 1.1 在usr/local文件夹里创建文件夹 mkdir software 1.2 进入文件夹 cd /usr/local/software/ 下载redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解压 tar zxvf redis-6.2.6.tar.gz重命名文件夹 mv redis-6.2.6 redis安装gcc编译器 yum i…

【RocketMQ Broker 相关源码】- broker 启动源码(2)

文章目录 1. 前言2. 创建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加载 ConsumeQueue 文件3.3 创建 StoreCheckpoint3.4 indexService.load 加载 IndexFile 文件3.5 recover 文件恢复3.6 延时消息服务加载 4. registerProcesso…

认识含盐褶皱和冲断带中的前造山运动蒸发岩变形

主要观察结果的示意图模型&#xff0c;并提出了三叠纪前造山蒸发岩变形的演化模型。&#xff08;a&#xff09; 蒸发岩的初始平缓隆起&#xff0c;在盐枕和盐背斜顶部有滑塌褶皱和同沉积伸展断层。&#xff08;b&#xff09; 底辟形成&#xff0c;主动刺穿和拖动折叠长底辟&…

数据库MySQL学习——day8(复习与巩固基础知识)

文章目录 1. 数据库基础概念复习2. 常用SQL命令复习2.1 SELECT 查询数据2.2 INSERT 插入数据2.3 UPDATE 更新数据2.4 DELETE 删除数据 3. 表操作复习3.1 创建表3.2 修改表3.3 删除表 4. 实践任务4.1 创建样例数据库和表4.2 插入和更新数据4.3 使用WHERE、ORDER BY、LIMIT进行查…

TS 字面量类型

str是string类型l str2是常量&#xff0c;类型是字面量类型 用途&#xff1a;配合联合类型确定更严谨精确的可选值利恩

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.3 客户端工具选择(psql/PGAdmin/DBeaver)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.3 客户端工具选择(psql/PGAdmin/DBeaver)1.3.1 工具定位与适用场景1.3.2 深度解析三大工具1.3.2.1 psql:命令行的终极掌控核心特性基础操作示例优缺点分析1.3.2.2 PGAdmin:PostgreSQL 专属管理平台…

2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】

2023年第十四届蓝桥杯省赛B组Java 题解 比赛整体情况说明 第十四届蓝桥杯大赛省赛B组Java赛道共有10道题目&#xff0c;题型分布如下&#xff1a; 题目类型题量难度分布考察重点结果填空题53简单 2中等基础算法、数学逻辑、字符串处理编程大题52中等 3困难动态规划、图论、…

深度学习中的数据增强:提升食物图像分类模型性能的关键策略

深度学习中的数据增强&#xff1a;提升食物图像分类模型性能的关键策略 在深度学习领域&#xff0c;数据是模型训练的基石&#xff0c;数据的数量和质量直接影响着模型的性能表现。然而&#xff0c;在实际项目中&#xff0c;获取大量高质量的数据往往面临诸多困难&#xff0c;…

jakarta.mail(javax.mail)包中关于SMTP协议支持的属性参数配置

一、程序属性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默认用户名。2mail.smtp.hostString要连接的SMTP服务器。3mail.smtp.portint如果 connect()方法未明确指定一个&#xff0c;则要连接的SMTP服务器端口。默认为25。4mail.smtp.connectiontimeoutint套接字连…

《解锁SCSS算术运算:构建灵动样式的奥秘》

SCSS作为CSS预处理器&#xff0c;算术运算功能犹如一颗璀璨明珠&#xff0c;赋予我们动态计算样式属性值的强大能力&#xff0c;让网页样式不再是一成不变的刻板呈现&#xff0c;而是能够根据各种条件和需求灵动变化。 在SCSS的世界里&#xff0c;算术运算绝非孤立的存在&…

Java 入门篇

文章目录 一、注释1、单行注释2、多行注释3、文档注释 二、字面量注意 三、变量四、标识符 一、注释 1、单行注释 // 同 C992、多行注释 /* 同 C89和 C99 等 */3、文档注释 /** 文档注释&#xff0c;其内容是可以提取到一个程序说明文档中去的*/二、字面量 同 C 常量 注意…

PowerShell安装Chocolatey

文章目录 环境背景安装参考 环境 Windows 11 专业版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有点类似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默认没有 grep 命令&#xff0c;则可以通过…