6.1、场景模拟

6.1.1、创建UserDao接口及实现类

package org.rain.spring.dao;

/**
* @author liaojy
* @date 2023/8/5 - 11:05
*/
public interface UserDao { void saveUser(); }

package org.rain.spring.dao.impl;

import org.rain.spring.dao.UserDao;

/**
* @author liaojy
* @date 2023/8/5 - 11:08
*/
public class UserDaoImpl implements UserDao { public void saveUser() {
System.out.println("保存成功");
} }

6.1.2、创建UserService接口及实现类

package org.rain.spring.service;

/**
* @author liaojy
* @date 2023/8/5 - 11:10
*/
public interface UserService { void saveUser(); }

package org.rain.spring.service.impl;

import org.rain.spring.dao.UserDao;
import org.rain.spring.service.UserService; /**
* @author liaojy
* @date 2023/8/5 - 11:23
*/
public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() {
return userDao;
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void saveUser() {
userDao.saveUser();
}
}

6.1.3、创建UserController

package org.rain.spring.controller;

import org.rain.spring.service.UserService;

/**
* @author liaojy
* @date 2023/8/5 - 11:32
*/
public class UserController { private UserService userService; public UserService getUserService() {
return userService;
} public void setUserService(UserService userService) {
this.userService = userService;
} public void saveUser(){
userService.saveUser();
}
}

6.1.4、配置bean

<?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="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean> <bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean> <bean id="userController" class="org.rain.spring.controller.UserController">
<property name="userService" ref="userService"></property>
</bean> </beans>

6.1.5、测试

    @Test
public void testAutoWireByXML(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-autowire.xml");
UserController userController = ioc.getBean(UserController.class);
userController.saveUser();
}

6.2、两种自动装配方式

6.2.1、方式一:byType(常用)

6.2.1.1、配置bean

注意:

若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null

若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常NoUniqueBeanDefinitionException

    <bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <!--
autowire属性:指定自动装配的策略,为bean的类类型(或接口类型)的属性自动赋值
byType:根据要赋值的属性的类型,匹配ioc容器中的兼容类型的bean,为属性赋值
-->
<bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byType"></bean> <bean id="userController" class="org.rain.spring.controller.UserController" autowire="byType"></bean>

6.2.1.2、测试

6.2.2、方式二:byName(后备)

6.2.2.1、配置bean

当在IOC中,有多个兼容类型的bean能够为属性赋值时;可以使用byName的方式,匹配id和属性名相同的bean为属性赋值

    <bean id="userDao" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <bean id="userDaotwo" class="org.rain.spring.dao.impl.UserDaoImpl"></bean>

    <!--
autowire属性:指定自动装配的策略,为bean的类类型(或接口类型)的属性自动赋值
byName:根据要赋值的属性的名称,匹配ioc容器中的对应id的bean,为属性赋值
-->
<bean id="userService" class="org.rain.spring.service.impl.UserServiceImpl" autowire="byName"></bean>

6、Spring之基于xml的自动装配的更多相关文章

  1. Spring入门(5)-自动装配Bean属性

    Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...

  2. 8 -- 深入使用Spring -- 2...6 Spring 4.0 增强的自动装配和精确装配

    8.2.6 Spring 4.0 增强的自动装配和精确装配 Spring提供了@Autowired 注解来指定自动装配,@Autowired可以修饰setter方法.普通方法.实例变量和构造器等.当使 ...

  3. spring bean的作用域和自动装配

    1 Bean的作用域 l  singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象  默认是单列 l  prototype原型: 每次获取bean都产生一个新的对象,比如Ac ...

  4. Spring 框架的概述以及Spring中基于XML的IOC配置

    Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...

  5. spring的基于xml的AOP配置案例和切入点表达式的一些写法

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  6. Spring中基于xml的AOP

    1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点 ...

  7. 最小化spring XML配置,Spring提供了4种自动装配策略。

    1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...

  8. Spring基于的注解自动装配和依赖注入(***)

    #自动装配的小Demo: package com.gyf.annotation; //DAO层 public interface UserDao { public void save(); } pac ...

  9. Spring中的applicationContext.xml实现自动装配

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  10. Spring系列7:`autowire`自动装配怎么玩

    回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...

随机推荐

  1. 2022-01-12:给定一个正数数组arr,长度为n,下标0~n-1, arr中的0、n-1位置不需要达标,它们分别是最左、最右的位置, 中间位置i需要达标,达标的条件是 : arr[i-1] >

    2022-01-12:给定一个正数数组arr,长度为n,下标0~n-1, arr中的0.n-1位置不需要达标,它们分别是最左.最右的位置, 中间位置i需要达标,达标的条件是 : arr[i-1] &g ...

  2. Mysql- DDL/DML/DQL/DCL 数据库基本操作语句(持续更新中)

    Mysql基本语法 前言: 在测试项目中经常需要使用到简单的Mysql语句,但是不知道语句结构是什么,经常在百度查来查去: 以下就是总结Mysql常用的基础操作语句: 只需要执行从创建开始执行示例中的 ...

  3. vue全家桶进阶之路29:Element Plus

    Element Plus是一个用于Vue.js的UI组件库,为开发人员提供了一组可重用和可定制化的组件,用于构建现代Web应用程序.它是流行的Element UI库的扩展,重点是提高性能和可访问性. ...

  4. 深入 Hyperf:HTTP 服务启动时发生了什么?

    当我们创建 Hyperf 项目之后,只需要在终端执行 php bin/hyperf.php start 启动命令,等上几秒钟,就可以看到终端输出的 Worker 进程已启动,HTTP 服务监听在 95 ...

  5. 谷歌语法Github及利用方式

    0x01简介 GoogleHack(谷歌语法)是指使用Google等搜索引擎对某些特定的网络主机漏洞(通常是服务器上的脚本漏洞)进行搜索,以达到快速找到漏洞主机或特定主机的漏洞的目的.比如使用搜索包含 ...

  6. 非极大值抑制(NMS)算法详解

    NMS(non maximum suppression)即非极大值抑制,广泛应用于传统的特征提取和深度学习的目标检测算法中. NMS原理是通过筛选出局部极大值得到最优解. 在2维边缘提取中体现在提取边 ...

  7. pyhton 自动化进阶学习1 合并excel 报表,然后进行的透视表操作

    import xlrd import xlsxwriter import osimport pandas as pdimport numpy as np# 对合并报表进行透视# 待续# 获取文件夹所有 ...

  8. 为什么说 Go 语言字符串是不可变的?

    原文链接: 为什么说 Go 语言字符串是不可变的? 最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢? 这个问题本身并不困难,但对于 ...

  9. day09-SpringCloud Sleuth+Zipkin-链路追踪

    SpringCloud Sleuth+Zipkin-链路追踪 官网:spring-cloud/spring-cloud-sleuth: Distributed tracing for spring c ...

  10. flutter dio自定义http client

    final dio = Dio(); Dio getMyDio() { initAdapter(); dio.options.headers = {'apiKey': 'xxxxx'}; dio.op ...