​​Spring6梳理17——基于XML的自动装配

以上笔记来源:
尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)https://www.bilibili.com/video/BV1kR4y1b7Qc

目录

①引入

②场景模拟

2.1  创建UserController类文件

 2.2  创建UserService接口文件

 2.3  创建UserServiceImpl实现类文件

2.4  创建UserDao接口文件

2.5  创建UserDaoImpl实现类文件 

2.6  创建XML配置文件

2.6.1  根据类型进行自动装配

 2.6.2  根据名称进行自动装配

2.6  创建测试类文件

2.7  运行截图

③总结


①引入

自动装配:根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值

②场景模拟

2.1  创建UserController类文件

package com.atguigu.spring6.iocxml.auto.controller;

import com.atguigu.spring6.iocxml.auto.dao.UserDao;
import com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl;
import com.atguigu.spring6.iocxml.auto.service.UserService;
import com.atguigu.spring6.iocxml.auto.service.UserServiceImpl;

/**
 * @package: com.atguigu.spring6.iocxml.auto.controller
 * @className: UserController
 * @Description:
 * @author: haozihua
 * @date: 2024/10/19 16:34
 */
public class UserController {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

    public void addUser(){
        System.out.println("Controller方法执行了...");
        //调用Service的方法
        userService.addUserService();
//        UserService userService = new UserServiceImpl();
//        userService.addUserService();
    }
}

 2.2  创建UserService接口文件

package com.atguigu.spring6.iocxml.auto.service;

public interface UserService {
    public void addUserService();
}

 2.3  创建UserServiceImpl实现类文件

package com.atguigu.spring6.iocxml.auto.service;

import com.atguigu.spring6.iocxml.auto.dao.UserDao;
import com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl;
import com.atguigu.spring6.iocxml.factorybean.User;

/**
 * @package: com.atguigu.spring6.iocxml.auto.service
 * @className: UserServiceImpl
 * @Description:
 * @author: haozihua
 * @date: 2024/10/19 16:35
 */
public class UserServiceImpl implements UserService{
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void addUserService() {
        System.out.println("userService方法执行了...");
        //调用dao方法
        userDao.addUserDao();
//        UserDao userDao = new UserDaoImpl();
//        userDao.addUserDao();
    }
}

2.4  创建UserDao接口文件

package com.atguigu.spring6.iocxml.auto.dao;

public interface UserDao {
    public void addUserDao();
}

2.5  创建UserDaoImpl实现类文件 

package com.atguigu.spring6.iocxml.auto.dao;

/**
 * @package: com.atguigu.spring6.iocxml.auto.dao
 * @className: UserDaoImpl
 * @Description:
 * @author: haozihua
 * @date: 2024/10/19 16:38
 */
public class UserDaoImpl implements UserDao {

    @Override
    public void addUserDao() {
        System.out.println("addUserDao方法执行了...");
    }
}

2.6  创建XML配置文件

2.6.1  根据类型进行自动装配

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--根据类型自动装配-->
    <bean id="userController" class="com.atguigu.spring6.iocxml.auto.controller.UserController"
          autowire="byType">
    </bean>
    <bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
          autowire="byType">
    </bean>
    <bean id="userDao" class="com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl"></bean>

</beans>

 2.6.2  根据名称进行自动装配

<?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/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--根据名称自动装配-->
        <bean id="userController" class="com.atguigu.spring6.iocxml.auto.controller.UserController"
              autowire="byName">
        </bean>
        <bean id="userService" class="com.atguigu.spring6.iocxml.auto.service.UserServiceImpl"
              autowire="byName">
        </bean>
        <bean id="userDao" class="com.atguigu.spring6.iocxml.auto.dao.UserDaoImpl"></bean>

</beans>

2.6  创建测试类文件

package com.atguigu.spring6.iocxml.auto;

import com.atguigu.spring6.iocxml.auto.controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @package: com.atguigu.spring6.iocxml.auto
 * @className: Test
 * @Description:
 * @author: haozihua
 * @date: 2024/10/19 17:01
 */
public class TestUser {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean-auto.xml");
        UserController userController = context.getBean("userController", UserController.class);
        userController.addUser();

    }
}

2.7  运行截图

③总结

实现XML的自动装配一共有两种方式可以实现,通过类型和名称均可以进行装配,需要注意的是,当按照类型进行自动装配时,需要注意接口的实现类是否有多个,当接口的实现类有多个时,就会产生如下异常,需要注意。

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.atguigu.spring6.bean.HelloWorld' available: expected single matching bean but found 2: helloworldOne,helloworldTwo

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

同济大学计算机考研

文章目录 一、初试1.院校情况1.复试名单2.报录比3.学硕人数 二、复试(一) 数据库2016复试题一、选择题 &#xff08;Multiple Choices&#xff09;二、简答题 2018复试题一、选择题&#xff08;一&#xff09;数据库&#xff1a;1-10&#xff08;二&#xff09;C语言&#xff1…

植物大战僵尸杂交版游戏分享

植物大战僵尸杂交版游戏下载&#xff1a;夸克网盘分享 无捆绑之类的隐形消费&#xff0c;下载即玩

【软件工程】过程和生命周期的建模

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必练内功_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 过…

springboot整合xxl-job实现定时任务

搭建调度中心xxl-job-admin 下载调度中心项目 gitee github 注&#xff1a; 下载项目的版本应与集成项目pom引用xxl-job版本号对应上。 执行初始化数据库SQL sql路径&#xff1a; doc/db/tables_xxl_job.sql XXL-JOB调度模块基于自研调度组件并支持集群部署&#xff0c;调…

flv格式如何转换mp4?将flv转换成MP4格式的9种转换方法

flv格式如何转换mp4&#xff1f;在进行flv转MP4的转换之前&#xff0c;了解两种格式的基本特点和差异也是至关重要的。flv格式以其流媒体传输的高效性和对Flash Player的依赖而闻名&#xff0c;而MP4则以其广泛的兼容性、高质量的音视频同步以及灵活的编码选项而著称。通过对比…

vue mixins使用示例

混入 (mixins)&#xff1a; 是一种分发 Vue 组件中可以复用功能灵活的方式。混入对象可以包含任意组件的选项。当组件使用混入对象的时候&#xff0c;所有混入对象的选项将被混入该组件本身的选项。 使用示例: 定义使用的mixins对象 export const HelloWorldMixin {data() {r…

Chromium 沙盒Sandbox源码介绍(3)

本篇主要说下沙箱的环境变量策略【Environment】&#xff1a; 一、环境变量&#xff1a; getEnvironmentStrings 函数返回指向内存块的指针&#xff0c;该内存块包含调用进程的环境变量 (系统和用户环境变量) getEnvironmentStrings 函数 (processenv.h) - Win32 apps | Mic…

ubuntu2204配置cuda

ubuntu2204配置cuda ✅系统版本&#xff1a;ubuntu22.04 LTS ✅显卡&#xff1a;英伟达2070S ✅CPU&#xff1a;i9 10900 ✅主板&#xff1a;戴尔品牌机 教程&#x1f4a8;&#x1f4a8;&#x1f4a8;&#x1f4a8;&#xff1a; ps&#xff1a;本人按照该方法一遍成功&#…

EasyX:初始化绘图窗口initgraph() 的使用

前言 学习使用EasyX图形库的initgraph窗口函数。 一、创建新项目 二、创建C空项目 三、找个地方存一下&#xff0c;创建 四、如果左边的框框找不到 五、点视图&#xff0c;然后点解决方案管理器&#xff0c;左边的框框就出来了 六、源文件添加新建项 七、给文件取个名&#x…

qt QPushButton详解

QPushButton是Qt Widgets模块中的一个基本控件&#xff0c;用于提供可点击的按钮。它是用户界面中最为常见和常用的控件之一&#xff0c;通过点击按钮&#xff0c;用户可以触发特定的应用程序操作。 重要方法 QPushButton(const QIcon &icon, const QString &text, QWi…

数据通信与网络课程展示图谱问答展示系统

&#x1f4a1; 你是否在学习“数据通信与网络”时感觉知识点分散&#xff0c;难以整理&#xff1f;学了后面忘记前面&#xff0c;知识点的关联也难以梳理&#xff1f;别担心&#xff01;我们公司推出的【数据通信与网络课程展示图谱问答系统】帮你一次性解决所有问题&#xff0…

手撕反向传播

关于二分类的交叉熵损失部分数学推导过程。 有些地方加以注释&#xff0c;公式太多懒得MD格式了 #%% import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import datasetsiris_data datasets.load_iris() in_put_data iris_data.data corr…

Golang | Leetcode Golang题解之第494题目标和

题目&#xff1a; 题解&#xff1a; func findTargetSumWays(nums []int, target int) int {sum : 0for _, v : range nums {sum v}diff : sum - targetif diff < 0 || diff%2 1 {return 0}neg : diff / 2dp : make([]int, neg1)dp[0] 1for _, num : range nums {for j …

【嵌入式Linux】Linux设备树详解

设备树是是Linux中一种用于描述硬件配置的数据结构&#xff0c;它在系统启动时提供给内核&#xff0c;以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要&#xff0c;因为这些系统通常不具备标准的硬件配置&#xff0c;需要根据实际的硬件配置来动态配置内核…

JMeter之mqtt-jmeter 插件介绍

前言 mqtt-jmeter插件是JMeter中的一个第三方插件&#xff0c;用于支持MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的性能测试。MQTT是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网和传感器网络中。 一、安装插件 mqtt-jmeter项目…

Java项目-基于springboot框架的时间管理系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

数据抓取时,使用动态IP要注意哪些?

在充满竞争和数据驱动的商业环境中&#xff0c;动态IP已成为数据抓取过程中不可或缺的工具。动态IP的应用能有效提高抓取成功率&#xff0c;但同时也伴随着一系列需要注意的问题。在本文中&#xff0c;我们将详细探讨在数据抓取时使用动态IP时应注意的事项&#xff0c;以确保抓…

git-合并连续两次提交(一个功能,备注相同)

前言&#xff1a; 场景是这样&#xff0c;由于我是实现一个功能&#xff0c;先进行了一次commit,然后我发现写的有些小问题&#xff0c;优化了一下功能并且把代码优化了一次&#xff0c;于是又提交了一次。两次的提交都是以相同的备注&#xff08;当然这个无所谓&#xff09;&a…

【设计模式系列】简单工厂模式

一、什么是简单工厂模式 简单工厂模式&#xff08;Simple Factory Pattern&#xff09;是一种设计模式&#xff0c;其中包含一个工厂类&#xff0c;根据传入的参数不同&#xff0c;返回不同类的实例。这个工厂类封装了对象的创建逻辑&#xff0c;使得客户端代码可以从直接创建…

CSDN Markdown 编辑器语法大全

Markdown 是一种轻量级标记语言&#xff0c;它以简洁、易读易写的特点&#xff0c;被广泛应用于技术文档、博客文章、笔记等领域。CSDN 的 Markdown 编辑器为用户提供了丰富的功能&#xff0c;让用户能够轻松地创建格式规范、内容丰富的文档。以下是一份详细的 CSDN Markdown 编…