基于Xml方式Bean的配置-Bean的依赖注入以及·自动装配

news2024/11/23 21:28:20

Bean的依赖注入配置

  • Bean的依赖注入方式

    • 注入方式配置方式
      通过Bean的set方法注入
      <property name="userDAO" ref="userDAO"/>
      <property name="userDAO" value="userDAO"/>
      通过构造Bean的方法进行注入
      <constructor-arg name="userDAO" ref="userDAO"/>
      <constructor-arg name="userDAO" value="userDAO"/>
      • 其中,ref是reference的缩写形式,翻译为:涉及,参考的意思,用于引用其它Bean的id,value用于指定属性值

  • 注入数据类型

    • 普通数据类型:String、int、boolean,通过value属性指定

    • 引用数据类型:UserDAOImpl,通过ref属性指定

    • 集合数据类型:List、Map、Properties等

      • 普通数据类型的集合

        • 配置文件

          •     <bean name="UserService" class="com.example.Service.Impl.UserServiceImpl">
                    <property name="stringList">
                        <list>
                            <value>aaaa</value>
                            <value>bbbb</value>
                            <value>cccc</value>
                        </list>
                    </property>
                </bean>
      • 引用数据类型的集合

        • 配置文件(两种方式都可以)

        •         <property name="DAOList">
                      <list>
                          <ref bean="DAO1"></ref>
                          <ref bean="DAO2"></ref>
                          <ref bean="DAO3"></ref>
                          <ref bean="DAO4"></ref>
                      </list>
                  </property>
              </bean>
              <bean name="DAO1" class="com.example.DAO.Impl.UserDAOImpl"></bean>
              <bean name="DAO2" class="com.example.DAO.Impl.UserDAOImpl"></bean>
              <bean name="DAO3" class="com.example.DAO.Impl.UserDAOImpl"></bean>
              <bean name="DAO4" class="com.example.DAO.Impl.UserDAOImpl"></bean>

        •         <property name="DAOList">
                      <list>
                          <bean name="DAO1" class="com.example.DAO.Impl.UserDAOImpl"></bean>
                          <bean name="DAO2" class="com.example.DAO.Impl.UserDAOImpl"></bean>
                          <bean name="DAO3" class="com.example.DAO.Impl.UserDAOImpl"></bean>
                          <bean name="DAO4" class="com.example.DAO.Impl.UserDAOImpl"></bean>
                      </list>
                  </property>
      • bean的对应类

        • package com.example.Service.Impl;
          
          import com.example.DAO.UserDAO;
          import com.example.Service.UserService;
          
          import java.util.List;
          
          
          public class UserServiceImpl implements UserService {
              private List<String> stringList;
              private List<UserDAO> DAOList;
          
              public void setStringList(List stringList) {
                  this.stringList = stringList;
              }
          
              public void setDAOList(List daoList) {
                  this.DAOList = daoList;
              }
          
              public void showStringList() {
                  System.out.println(stringList);
                  System.out.println(DAOList);
              }
          
          
          }
          
      • 测试代码

        • package com.example.Test;
          
          import com.example.Service.Impl.UserServiceImpl;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          
          public class TestApplicationContext {
              public static void main(String[] args) {
                  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
                  UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserService");
                  userServiceImpl.showStringList();
              }
          }
          
      • 运行结果

以上介绍的是List集合

下列直接展示Set、Map、Properties

  • 配置文件
    • <?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:util="http://www.springframework.org/schema/util"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
          <bean name="UserService" class="com.example.Service.Impl.UserServiceImpl">
              <property name="stringList">
                  <list>
                      <value>aaaa</value>
                      <value>bbbb</value>
                      <value>cccc</value>
                  </list>
              </property>
              <property name="DAOList">
                  <list>
                      <ref bean="DAO1"></ref>
                      <ref bean="DAO2"></ref>
                      <ref bean="DAO3"></ref>
                      <ref bean="DAO4"></ref>
                  </list>
              </property>
              <property name="StringSet">
                  <set>
                      <value>aaaa</value>
                      <value>bbbb</value>
                      <value>cccc</value>
                  </set>
              </property>
              <property name="DAOSet">
                  <set>
                      <ref bean="DAO1"/>
                      <ref bean="DAO2"/>
                      <ref bean="DAO3"/>
                      <ref bean="DAO4"/>
                  </set>
              </property>
              <property name="StringMap">
                  <map>
                      <entry key="StringMap1" value="aaaa"></entry>
                      <entry key="StringMap2" value="bbbb"></entry>
                      <entry key="StringMap3" value="cccc"></entry>
                  </map>
              </property>
              <property name="DAOMap">
                  <map>
                      <entry key="DAOMap1" value-ref="DAO1"></entry>
                      <entry key="DAOMap1" value-ref="DAO2"></entry>
                      <entry key="DAOMap1" value-ref="DAO3"></entry>
                      <entry key="DAOMap1" value-ref="DAO4"></entry>
                  </map>
              </property>
      
          </bean>
          <bean name="DAO1" class="com.example.DAO.Impl.UserDAOImpl"></bean>
          <bean name="DAO2" class="com.example.DAO.Impl.UserDAOImpl"></bean>
          <bean name="DAO3" class="com.example.DAO.Impl.UserDAOImpl"></bean>
          <bean name="DAO4" class="com.example.DAO.Impl.UserDAOImpl"></bean>
      </beans>
  • Bean对应的类

    • package com.example.Service.Impl;
      
      import com.example.DAO.UserDAO;
      import com.example.Service.UserService;
      
      import java.util.List;
      import java.util.Map;
      import java.util.Set;
      
      
      public class UserServiceImpl implements UserService {
          // todo 无参构造方法
      //    public UserServiceImpl() {
      //        System.out.println("无参构造方法");
      //    }
      
          // todo 有参构造方法
      //    public UserServiceImpl(String name) {
      //        System.out.println("有参构造方法");
      //        System.out.println(name);
      //    }
      
          //    private UserDAO userDAO;
      //
      //    public void setUserDAO(UserDAO userDAO) {
      //    }
          private List<String> stringList;
          private List<UserDAO> DAOList;
          private Set<String> StringSet;
          private Set<UserDAO> DAOSet;
          private Map<String, String> StringMap;
          private Map<String, UserDAO> DAOMap;
      
          public void setStringList(List stringList) {
              this.stringList = stringList;
          }
      
          public void setStringSet(Set<String> stringSet) {
              this.StringSet = stringSet;
          }
      
          public void setDAOList(List daoList) {
              this.DAOList = daoList;
          }
      
          public void show() {
              System.out.println("StringList:" + stringList);
              System.out.println("DAOList:" + DAOList);
              System.out.println("StringSet:" + StringSet);
              System.out.println("DAOSet:" + DAOSet);
              System.out.println("StringMap:" + StringMap);
              System.out.println("DAOMap:" + DAOMap);
          }
      
      
          public void setDAOSet(Set daoSet) {
              this.DAOSet = daoSet;
          }
      
          public void setStringMap(Map stringMap) {
              this.StringMap = stringMap;
          }
      
          public void setDAOMap(Map daoMap) {
              this.DAOMap = daoMap;
          }
      }
      
  • 测试类

    • package com.example.Test;
      
      import com.example.Service.Impl.UserServiceImpl;
      import org.springframework.context.support.ClassPathXmlApplicationContext;
      
      public class TestApplicationContext {
          public static void main(String[] args) {
              ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
              UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserService");
              userServiceImpl.show();
          }
      }
      
  • 运行结果

 上述Bean的值都需要自己手动注入,下列展示自动注入

  • Bean的自动装配

    • 如果被注入的属性类型是Bean引用的话,那么可以在<bean>标签中使用autowire属性去装配自动注入方式,属性值有两个
      • byName:通过属性名自动装配,即去匹配SetXxx与id=“xxx”(name=“xxx”)是否一致;
      • byType:通过Bean的类型从容器中匹配,匹配出多个相同的Bean类型时会报错
      • <bean id="userService" class="com.example.Service.Impl.UserServiceImpl" autowire="byType"/>
    • 通过byNmae

    • 配置文件

      •     <bean id="userService" class="com.example.Service.Impl.UserServiceImpl" autowire="byName"/>
            <bean id="userDAO" class="com.example.DAO.Impl.UserDAOImpl"></bean>
    • Bean对应的类

      • 在该类总注入UserDAO(代码中体现在SetXxx()方法中)

      • package com.example.Service.Impl;
        
        import com.example.DAO.UserDAO;
        import com.example.Service.UserService;
        
        import java.util.List;
        import java.util.Map;
        import java.util.Set;
        
        
        public class UserServiceImpl implements UserService {
            private UserDAO userDAO;
        
            public void setUserDAO(UserDAO userDAO) {
                this.userDAO = userDAO;
            }
        
            public void show() {
                System.out.println(userDAO);
            }
        
        }
        
    • 测试类代码

      • package com.example.Test;
        
        import com.example.Service.Impl.UserServiceImpl;
        import org.springframework.context.support.ClassPathXmlApplicationContext;
        
        public class TestApplicationContext {
            public static void main(String[] args) {
                ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
                UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("userService");
                userServiceImpl.show();
                Object userDAO = context.getBean("userDAO");
                System.out.println(userDAO);
            }
        }
        
    • 运行结果

      •    对比发现,成功通过名称将UserDAO完成了bean对象的注入
    • 手动注入配置文件如下
      •     <bean id="userService" class="com.example.Service.Impl.UserServiceImpl">
                <property name="userDAO">
                    <ref bean="userDAO"></ref>
                </property>
            </bean>
            <bean id="userDAO" class="com.example.DAO.Impl.UserDAOImpl"></bean>
    • 通过byType

      • 配置文件如下
        •     <bean id="userService" class="com.example.Service.Impl.UserServiceImpl" autowire="byType">
              </bean>
              <bean id="userDAO" class="com.example.DAO.Impl.UserDAOImpl"></bean>

 

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

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

相关文章

AB试验(三)一次试验的规范流程

AB试验&#xff08;三&#xff09;一次试验的规范流程 一次完整且规范的A/B试验可参考下图&#xff1a; 确定目标和假设 核心&#xff1a;A/B测试是因果推断&#xff0c;所以我们首先要确定原因和结果。目标决定了结果&#xff0c;而假设又决定了原因。 如何确定 分析问题&am…

极盾故事|“二次授权”“脱敏复原”,某银行数据动态脱敏系统get新技能?

数据&#xff0c;既要可用&#xff0c;又要安全&#xff0c;还要合规&#xff01;企业“一难、两难、多难”的困境&#xff0c;如何破&#xff1f; 极盾科技助力某商业银行&#xff0c;基于极盾觅踪构建应用数据动态脱敏系统&#xff0c;实现30&#xff0b;核心应用系统以及用户…

科技云报道:青云科技打出“AI算力牌”,抢跑“云+AI”新增市场

科技云报道原创。 近三年&#xff0c;中国云计算市场在多个维度同时发生着剧烈变化——疫情极大加速了全社会对于数字化的认知和接受程度&#xff1b;一系列云原生技术依托着开源和蓬勃的市场而迅速发展演变&#xff0c;更多产品和技术名词同时涌向市场&#xff1b;国际关系复…

Jenkins+Gitee+Docker+Ruoyi项目前后端分离部署

前言 描述&#xff1a;本文主要是用来记录 如何用标题上的技术&#xff0c;部署到云服务器上通过ip正常访问。 一、总览 1.1、Docker做的事 拉取 mysql 镜像拉取 redis 镜像拉取 jdk 镜像拉取 nginx 镜像 解释说明&#xff1a;前端项目的打包文件放在 nginx容器运行。后端…

时间在情绪周期视角来看也是不存在的

在交易软件里我们会发现有交易周期&#xff0c;分钟级别&#xff0c;小时级别&#xff0c;天&#xff0c;周&#xff0c;月&#xff0c;年等。对于超短线而言这些周期没有任何意义&#xff0c;换言之时间这个东西不是一个维度&#xff0c;所以你去用时间选出来的股票那代表什么…

以“窖主节”之名,泸州老窖邀你赴一场“浓烈”的约会

“永远不要低估一颗浓烈的心。” 最近&#xff0c;在河北秦皇岛海边沙滩上&#xff0c;一座“双手碰杯”的艺术装置吸引了不少来自天南海北的游客打卡拍照。原来&#xff0c;这是泸州老窖“窖主节”秦皇岛站的活动主题打卡点。 9月15日—17日&#xff0c;为期三天的泸州老窖“…

【VisualStudio】NuGet包管理器下载缓存packages文件夹过大怎么清理

使用Visual Studio 开发工具时间长了&#xff0c;会发现整个项目的总大小越来越大&#xff0c;默认是存放在电脑系统盘里的&#xff0c;随着Windows11系统常常更新重启&#xff0c;导致系统盘闲置空间越来越小&#xff0c;该怎么办呢。 描述问题 整个解决方案项目会越变越大&…

MURD560-ASEMI超快恢复二极管MURD560

编辑&#xff1a;ll MURD560-ASEMI超快恢复二极管MURD560 型号&#xff1a;MURD560 品牌&#xff1a;ASEMI 封装&#xff1a;TO-252 正向电流&#xff1a;5A 反向电压&#xff1a;600V 引线数量&#xff1a;3 芯片个数&#xff1a;1 芯片尺寸&#xff1a;74MIL 漏电流…

Spring Cloud Alibaba Ribbon负载均衡器

文章目录 Ribbon 负载均衡器环境搭建1.依赖2.配置3.修改其默认的负载均衡策略3.1 验证 4.创建自定义的Rule4.1 MyRule&#xff08;&#xff09;4.2 在配置config类中配置 5.饥饿加载6.我只想访问不想被别的访问 Ribbon 负载均衡器 背景 Ribbon 是一个用于客户端负载均衡的开源…

云原生容器平台——新华资产数字化转型加速器

新华资产管理股份有限公司&#xff08;以下简称“新华资产”&#xff09;于2006年5月经中国保险监督管理委员会批准、7月3日正式挂牌成立&#xff0c;是国内首批专业保险资产管理机构。2020年上半年&#xff0c;公司管理的资产规模突破万亿元人民币&#xff0c;投资收益水平居行…

Gin学习记录4——Controller和中间件

一. Controller 用不同的Controller可以实现业务的分类&#xff0c;不同类型的请求可以共用同一套中间件 1.1 单文件Controller 几乎等同于函数封装&#xff0c;直接将ctrl的代码写入到一个文件里然后调用&#xff1a; package adminimport ("net/http""git…

天猫健康“小补点”掀起养生新趋势,燕窝、自在水搭着喝双倍补

长时间对着电脑、一坐就是一天、想运动却挤不出时间……这几乎是大部分职场人的常态。为了守护健康&#xff0c;许多职场人开始探索便捷、有效的养生方式。 顺应这一需求&#xff0c;天猫健康发起“带薪养生小补点”活动&#xff0c;携手新加坡健康品牌余仁生、元气森林旗下品…

爬虫 — Scrapy 框架(二)

目录 一、Scrapy 核心文件1、spider2、Request3、构造 post 请求4、response 二、案例三、Scrapy 下载中间件1、执行顺序2、使用方法3、Download Middlewares 默认方法4、代理 IP4.1、工作原理4.2、分类4.3、查看 IP 地址4.4、常用代理 四、Scrapy 爬虫中间件五、Scrapy 下载图…

基础课-解析几何

1.平面直角坐标系 两点A(x1,y1)与B(x2,y2)之间的距离: 2.两点斜率公式 3.点到直线的距离 平行线之间的距离 4.平面直线方程的几种形式 点斜式 点P(x0,y0),斜率为k的直线方程:y-y0k(x-x0) 5.圆

会员管理系统H5-01会员开卡

我们前边7篇文章讲解的是PC端的功能&#xff0c;还需要为商家提供一套移动端的后台管理程序。在微搭中&#xff0c;移动端的后台程序我们可以使用H5进行开发&#xff0c;开发完毕后可以启用登录&#xff0c;这样管理员就可以在手机上进行操作。 01 创建应用 登录微搭后台&…

企业选择预测性维护解决方案的常见问题和PreMaint的策略

预测性维护技术在现代制造业中扮演着越来越重要的角色&#xff0c;有助于提高设备可靠性、降低维护成本并最大程度地减少停机时间。然而&#xff0c;一些企业在选择预测性维护解决方案时仍存在一些常见问题和误解。在这篇文章中&#xff0c;我们将探讨一些常见问题&#xff0c;…

Python与数据分析--Matplotlib-1

目录 1.Matplotlib库函数导入 2.简单尝试绘图 3.绘制多条折线图 4.绘制多种颜色风格曲线 5.图片内容文本操作实例 6.图例设置实例 7.坐标轴设置实例 1.Matplotlib库函数导入 #导入matplotlib库 import matplotlib as mpl import matplotlib.pyplot as plt #平常一般用第…

手把手教你前端 NodeJs 常用技术和第三方库使用详细教程(每周更新中)

dotenv 加载环境变量 dotenv是一个用于在Node.js项目中加载环境变量的库。它允许你将环境变量存储在一个名为.env的文件中&#xff0c;并在你的应用程序中轻松访问这些变量。 dotenv 官方网站&#xff1a;https://www.dotenv.org/docs 要使用dotenv&#xff0c;你需要首先在你…

(2023,微调节,多纵横比训练,细化模型)SDXL:用于高分辨率图像合成的改进的潜在扩散模型

SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 改进稳定扩散 2.1 架构与规模 …

Python基础数据结构入门必读指南

更多资料获取 作者主页&#xff1a;涛哥聊Python 个人网站&#xff1a;涛哥聊Python 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享的是Python中常见的数据结构。 1.数组 含义&#xff1a;数组是一种有序的数据结构&#xff0c;其中的元素可以按照索引来访问。数组…