6、Spring之基于xml的自动装配
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的自动装配的更多相关文章
- Spring入门(5)-自动装配Bean属性
Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...
- 8 -- 深入使用Spring -- 2...6 Spring 4.0 增强的自动装配和精确装配
8.2.6 Spring 4.0 增强的自动装配和精确装配 Spring提供了@Autowired 注解来指定自动装配,@Autowired可以修饰setter方法.普通方法.实例变量和构造器等.当使 ...
- spring bean的作用域和自动装配
1 Bean的作用域 l singleton单列:整个容器中只有一个对象实例,每次去访问都是访问同一个对象 默认是单列 l prototype原型: 每次获取bean都产生一个新的对象,比如Ac ...
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
- spring的基于xml的AOP配置案例和切入点表达式的一些写法
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- Spring中基于xml的AOP
1.Aop 全程是Aspect Oriented Programming 即面向切面编程,通过预编译方式和运行期动态代理实现程序功能的同一维护的一种技术.Aop是oop的延续,是软件开发中的 一个热点 ...
- 最小化spring XML配置,Spring提供了4种自动装配策略。
1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...
- Spring基于的注解自动装配和依赖注入(***)
#自动装配的小Demo: package com.gyf.annotation; //DAO层 public interface UserDao { public void save(); } pac ...
- Spring中的applicationContext.xml实现自动装配
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Spring系列7:`autowire`自动装配怎么玩
回顾 前几篇我们介绍各种依赖依赖注入,都是显式指定的,配置明确但同时也有些繁杂和重复."很多发明的出发点,都是为了偷懒,懒人是推动社会进步的原动力".Spring 提供了自动注入依 ...
随机推荐
- 2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9
2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质.比如8,9,10不是两两互质,因为8和10的最大公约数是2. 福大大 答案2021-05- ...
- Django-2:创建项目Project
命令:django-admin startproject mysite PS C:\Users\liujun> cd e:\pyapp\cmdbPS E:\pyapp\cmdb> djan ...
- ODDO之三 :Odoo 13 开发之创建第一个 Odoo 应用
Odoo 开发通常都需要创建自己的插件模块.本文中我们将通过创建第一个应用来一步步学习如何在 Odoo 中开启和安装这个插件.我们将从基础的开发流学起,即创建和安装新插件,然后在开发迭代中更新代码来进 ...
- chrome 应用程序无法启动,因为应用程序的并行配置不正确
win10系统谷歌浏览器无法启动,系统报错,如下图: 解决方案: 步骤1:进入chrome的安装路径C:\Program Files (x86)\Google\Chrome\... ...(找到自己的 ...
- 你以为搞个流水线每天跑,团队就在使用CI/CD实践了?
在实践中,很多团队对于DevOps 流水线没有很透彻的理解,要不就创建一大堆流水线,要不就一个流水线通吃.实际上,流水线的设计和写代码一样,需要基于"业务场景"进行一定的设计编排, ...
- CMU15445 (Fall 2020) 数据库系统 Project#2 - B+ Tree 详解(上篇)
前言 考虑到 B+ 树较为复杂,CMU15-445 将 B+ 树实验拆成了两部分,这篇博客将介绍 Checkpoint#1 部分的实现过程,搭配教材 <DataBase System Conce ...
- 批量生成,本地推理,人工智能声音克隆框架PaddleSpeech本地批量克隆实践(Python3.10)
云端炼丹固然是极好的,但不能否认的是,成本要比本地高得多,同时考虑到深度学习的训练相对于推理来说成本也更高,这主要是因为它需要大量的数据.计算资源和时间等资源,并且对超参数的调整也要求较高,更适合在云 ...
- zabbix 监控nginx
nginx内置了一个status状态的功能,通过配置可以看到nginx的运行情况,status显示的内容包括当前连接数,处于活动状态的连接数,已经处理的请求数等等,可以利用这个功能编写zabbix监控 ...
- React ISR 如何实现 - 最后的 Demo
之前写了两个 demo 讲解了如何实现 SSR 和 SSG,今天再写个 demo 说在 ISR 如何实现. 什么是 ISR ISR 即 Incremental Static Regeneration ...
- 组合数学_第4章_Polya定理
第4章 Polya定理 4.1 群的概念 4.1.1 群的定义 给定一个集合\(G=\{a,b,c,\cdots\}\)和集合\(G\)上的二元运算"\(\cdot\)",并满足下 ...