Spring注入

news2024/11/24 17:10:26

前言

向一个普通的类中注入数据有什么方法?

set方法

构造方法

依赖注入描述了在容器之间建立bean与bean之间依赖关系的过程,如果bean运行需要的是数字或者字符串呢?

引用类型

基本数据类型与String

依赖注入方式

setter注入

简单类型

引用类型

构造器注入

简单类型

引用类型

一、Setter注入

1、引用数据类型

在bean中定义引用数据类型并且提供可访问的set方法。

    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }
    <bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
        <property name="bookDao" ref="BookDao_test"/>
    </bean>

 配置文件中使用property标签ref属性注入引用类型对象。

(property对应的是bean中的引用数据类型变量,ref对应其他bean的id)

2、基本数据类型和String

在bean中定义基本数据类型并且提供set方法。

    private int connection;
    private String databases;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void setConnection(int connection) {
        this.connection = connection;
    }

在配置文件中使用property标签value属性进行注入简单数据类型 

 <bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl" init-method="init" destroy-method="destroy">
        <!--配置没有顺序一说-->
        <property name="connection" value="10"/>
        <property name="databases" value="mysql"/>
    </bean>

二、 构造器注入

引用数据类型

在bean中定义引用数据类型属性并且提供可访问的构造方法

    private BookDao bookDao;
    //这是一个构造方法
    public BookDaoImpl(BookDao bookDao) {
        this.bookDao = bookDao;
    } 

在配置文件中使用constructor-arg标签ref属性注入引用数据类型对象

<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
        <constructor-arg name="bookDao" ref="BookDao_test"/>
</bean>
<bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl"/>

简单数据类型与String

在bean中定义引用数据类型并且提供可访问的set方法

    private int connection;
    private String databases;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void setConnection(int connection) {
        this.connection = connection;
    }

配置中使用constructor-arg标签value属性注入简单数据类型

<bean id="bookDao" name="BookDao_test" class="com.tsj.dao.impl.BookDaoImpl">
    <constructor-arg name="connectionNumber" value=10>
</bean>

参数适配

为了解决配置文件和set方法中变量名相同耦合度较高的问题,有以下两种解决方法。

总结 

 依赖自动装配

Ioc容器根据bean所依赖的资源在容器中自动查找并注入到bean中的过程称之为自动装配

自动装配方式

1、按类型(最常用)

<bean id="userdao" name="userDao_1" class="com.tsj.dao.impl.UserDaoImpl" />
<bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" autowire="byType"/>

(我们可以对比一下使用setter注入) 

    <bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
        <property name="bookDao" ref="BookDao_test"/>
    </bean>

2、按名称

3、按构造方法

4、不启用自动装配

集合注入

注意:如果是引用类型注入,添加<ref bean=""/>

    <bean id="bookService" name="service" class="com.tsj.service.impl.BookServiceImpl" scope="prototype">
        <property name="bookDao" ref="BookDao_test"/>
        <property name="list">
            <list>
                <value>1010</value>
                <value>200</value>
                <value>300</value>
            </list>
        </property>
        <property name="arrar">
            <array>
                <value>dajiahao</value>
                <value>2buabeo</value>
                <value>fqf</value>
            </array>
        </property>
        <property name="map">
            <map>
                <entry key="country" value="tianjin"/>
                <entry key="country" value="tianjin"/>
                <entry key="country" value="tianjin"/>
                <entry key="country" value="tianjin"/>
            </map>
        </property>
    </bean>

 

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

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

相关文章

HUAWEI悦盒ec6108v9c 如何刷成海纳思系统(家用低功耗服务器,使用Home Assistant服务)

环境&#xff1a; 1.HW悦盒ec6108v9c一套 2.16G U盘 3.格式化软件USB_format.exe 4.固件 mv100-mdmo1g-usb-flash.zip&#xff08;底层是Ubuntu 20.04系统&#xff09; 5.十字螺丝刀 6.翘片/薄铲子 7.有线网络环境 8.镊子/回形针 问题描述&#xff1a; 最近玩智能家居…

最近我面了15个人,发现这些测试人都有个通病

最近公司离职好几个测试&#xff0c;也是赶上程序员跳槽的多&#xff0c;老板叫我招2个测试进来。4天时间面了15个人&#xff0c;怎么说呢&#xff0c;基本上没有符合要求的&#xff0c; 也没别的意思&#xff0c;因为我们公司小&#xff0c;开的薪水也不高&#xff0c;所以来…

Oracle中xmltype类型toObject函数用法实例

Oracle中xmltype类型toObject函数用法总结。 用法总结 xmltype是oracle中的type object类型。在实际使用中&#xff0c;可以当做xml对象来使用&#xff1a; set serveroutput ondrop type person_typex; create type person_typex is object (name varchar2(32),age number …

每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户

文章目录 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户每日语录第25题&#xff1a;1. 需求列表1. 初级题: 每日活跃用户 思路分析(1) 创建表(2) 思路 答案获取加技术群讨论附表文末SQL小技巧 后记 每天一道大厂SQL题【Day25】脉脉真题实战(一)每日活跃用户 大家好…

【React】路由,Hooks

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 路由Navigate导航组件 路由的嵌套useNavigate路由传递参数route配置抽取 路由 通过Link组件就可…

AntDB 事务机制

全局一致性 AntDB 的集群架构包括&#xff0c;一个 GTM&#xff08;Global Transaction Manager&#xff09;、多个Coordinator&#xff08;CN&#xff09;、多个 Datanode&#xff08;DN&#xff09;。其中 GTM 负责给其他的 DN 和CN 分发集群全局唯一的事务号和集群当前判断…

QT--配置Opencv

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请及时联系作者。 文章目录 前言一、下载已编译的opencv1..解压2..path路径 二、使用步骤1..pro文件2..h文件 总结 前言 只做第一个我&#xff0c;不做第二个谁。 一、下载已编译的opencv 适用于mingw编译器…

如何学习数据结构与算法? - 易智编译EaseEditing

学习和提升数据结构与算法的能力可以通过以下几个步骤&#xff1a; 学习基础知识&#xff1a; 了解数据结构和算法的基本概念和原理&#xff0c;包括常见的数据结构&#xff08;如数组、链表、栈、队列、树、图等&#xff09;和算法&#xff08;如排序、搜索、图算法等&#…

GreenPlum监控工具GPCC部署

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Fiddler抓包工具之fiddler的命令行窗口用法

fiddler的命令行窗口的相关命令 在fiddler官网有QuickExec使用教程&#xff0c;地址是http://docs.telerik.com/fiddler/knowledgebase/quickexec QuickExec 命令行窗口位于fiddler左下角黑色输入框&#xff0c;如下图&#xff1a; 按ALT Q&#xff0c;将焦点快速设置到Quic…

initramfs 最全解释与制作

先提几个问题&#xff1a; 0、什么是 initrd 和 initramfs&#xff1f; 概述 现代Linux系统都使用到了一种功能比较特殊的微型系统&#xff0c;作为Linux内核初始化完成但未进入最终系统时的过渡系统&#xff0c;主要的目的是为了将最终系统载入到根文件系统上&#xff0c;辅…

这个618,网工最值得买的路由器/交换机设备

大家好&#xff0c;我是老杨。 有小友最近扎堆冒出来问我&#xff0c;企业要采购路由器/交换机&#xff0c;买啥牌子好&#xff0c;买啥型号好。 又或者是&#xff0c;家里要买家用的路由器/电脑&#xff0c;啥性价比最高&#xff1f; 我真的很想吐槽一句&#xff0c;你们再问…

敏捷软件测试常见的七个误区

敏捷软件开发是从1990年代开始逐渐引起广泛关注的一种新型软件开发方法&#xff0c;是能够应对快速变化的需求的一种软件开发能力&#xff0c;它作为一种新型的开发模式&#xff0c;被越来越多地应用到软件项目中。 敏捷软件测试指的是在敏捷软件开发过程中跟质量相关的一系列…

Appium+Python3环境搭建,其实超简单!

appium可以说是做app最火的一个自动化框架&#xff0c;它的主要优势是支持android和ios&#xff0c;另外脚本语言也是支持java和Python。略懂Python&#xff0c;所以接下来的教程是appiumpython&#xff0c;自己搭建环境的时候&#xff0c;按照某些博客安装遇到各种奇葩问题&am…

【新版】系统架构设计师 - 嵌入式技术

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 嵌入式技术考点摘要嵌入式系统嵌入式系统开发与设计交叉开发环境软硬件协同设计嵌入式软件移植低功耗设计 嵌入式硬件嵌入式微处理器人工智能芯片微处理器体系结构 嵌入式操作系统&#xff08;EOS…

大涨39.9%!连续三季度蝉联全球第三,联想服务器做对了什么?

市场调查公司IDC最新发布的2023年第一季度x86服务器全球市场追踪报告显示&#xff0c;联想集团当季实现了39.9%的大幅增长、市场份额连续三季度蝉联全球第三&#xff0c;而全球排名前五厂商中戴尔下降25.1%、HPE微涨0.6%、浪潮下降38.7%、超微&#xff08;Super Micro&#xff…

考友经验分享——考研英语怎么答题

&#xff08;注&#xff1a;我的英语一般&#xff0c;这是其他人的考研英语经验&#xff0c;仅供参考&#xff0c;要早日找到适合自己的方法&#xff01;&#xff09; 管卫东老师的《管卫东的考研英语阅读最后冲刺阅读突破——技巧与总结》&#xff0c;觉得收获不小&#xff0…

python工具方法 41 对VOC|YOLO格式的数据进行resize操作

在目标检测中,相比于yolo格式,voc格式和coco格式都使用绝对值描述boxes的size,这在多数据集融合时存在一定的缺陷。尤其是在存在超高清影像中(在数据集中存在超高清影像通常会使dataloader内存不够用,或导致数据加载卡顿),我们不能仅对图像进行resize操作(还需要同时对…

软件测试基础知识必备之浅谈单元测试

什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;这里的最小可测试单元通常是指函数或者类。 单元测试都是以自动化的方式执行&#xff0c;所以在大量回归测试的场景下更能带来…

Docker consul的容器

consul服务更新和服务发现 什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&…