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

以上笔记来源:

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

目录

①引入

②场景模拟

[2.1 创建UserController类文件](#2.1 创建UserController类文件)

[2.2 创建UserService接口文件](#2.2 创建UserService接口文件)

[2.3 创建UserServiceImpl实现类文件](#2.3 创建UserServiceImpl实现类文件)

[2.4 创建UserDao接口文件](#2.4 创建UserDao接口文件)

[2.5 创建UserDaoImpl实现类文件](#2.5 创建UserDaoImpl实现类文件)

[2.6 创建XML配置文件](#2.6 创建XML配置文件)

[2.6.1 根据类型进行自动装配](#2.6.1 根据类型进行自动装配)

[2.6.2 根据名称进行自动装配](#2.6.2 根据名称进行自动装配)

[2.6 创建测试类文件](#2.6 创建测试类文件)

[2.7 运行截图](#2.7 运行截图)

③总结


①引入

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

②场景模拟

2.1 创建UserController类文件

java 复制代码
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接口文件

java 复制代码
package com.atguigu.spring6.iocxml.auto.service;

public interface UserService {
    public void addUserService();
}

2.3 创建UserServiceImpl实现类文件

java 复制代码
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接口文件

java 复制代码
package com.atguigu.spring6.iocxml.auto.dao;

public interface UserDao {
    public void addUserDao();
}

2.5 创建UserDaoImpl实现类文件

java 复制代码
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 复制代码
<?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 复制代码
<?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 创建测试类文件

java 复制代码
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

相关推荐
我的运维人生3 小时前
Spring Cloud微服务:构建现代应用的新基石
spring·spring cloud·微服务·运维开发·技术共享
A_aspectJ9 小时前
‌Spring MVC的主要组件有哪些?
java·spring·mvc
Slow菜鸟10 小时前
Spring 设计模式之装饰器模式
spring·设计模式·装饰器模式
鹿屿二向箔11 小时前
【毕业论文+源码】基于SSM(Spring + Spring MVC + MyBatis)的房屋租赁系统
spring·mvc·mybatis
A_aspectJ12 小时前
Spring 框架中都用到了哪些设计模式?
spring·设计模式·1024程序员节
AIGC绘画12 小时前
Spring微服务概述之spring cloud alibaba服务调用实践
java·spring·微服务
带刺的坐椅13 小时前
Spring SPI、Solon SPI 有点儿像(Maven 与 Gradle)
java·spring·solon·spi
武昌库里写JAVA14 小时前
【MySql】-0.1、Unbunt20.04二进制方式安装Mysql5.7和8.0
spring boot·spring·毕业设计·layui·课程设计
鱼跃鹰飞18 小时前
大厂面试真题-简单描述一下SpringBoot的启动过程
java·spring boot·后端·spring·面试
尘浮生20 小时前
Java项目实战II基于Spring Boot的小型诊疗预约平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·spring·课程设计