Spring(DI)

2023-11-01

DI(Dependency Injection)即依赖注入,对象之间的依赖由容器在运行期决定,即容器动态的将某个依赖注入到对象自重

基于XML配置注入依赖

有参构造函数注入依赖

bean类实现有参构造函数

public class Student {
    private Integer id;
    private String name;

    /**
     * 有参构造函数
     */
    public Student(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

在配置文件中配置参数通过有参构造函数给对象属性赋值

<!--通过有参构造注入依赖-->
    <bean id="student3" class="com.tulun.Spring.IOC.pojo.Student">
        <!--id属性注入-->
        <constructor-arg name="id" value="11"/>
        <!--name属性注入-->
        <constructor-arg name="name" value="图论"/>
    </bean>

有参构造是使用constructor-arg标签

set方法注入依赖

给对象的属性提供setter方法

public class Student {
    private Integer id;
    private String name;
    
    public void setId(Integer id) {this.id = id;}
    public void setName(String name) {this.name = name;}
}

在配置文件中通过set方式赋值

<!--通过setter方法注入依赖-->
    <bean id="student4" class="com.tulun.Spring.IOC.pojo.Student">
        <property name="id" value="12"/>
        <property name="name" value="Java31"/>
    </bean>

通过set方式使用的是property标签

注入的依赖也可以是自定义类型


    <!--注入自定义类型-->
    <bean id="user" class="com.tulun.Spring.IOC.pojo.User">
        <constructor-arg name="name" value="Java"/>
    </bean>
    <bean id="student5" class="com.tulun.Spring.IOC.pojo.Student">
        <property name="id" value="12"/>
        <property name="name" value="Java31"/>
        <!--value属性:将参数按照Syringe类型类解析  ref类型:Spring中管理的对象的Id值-->
        <property name="user" ref="user"/>
    </bean>

自定义类型也是要交给spring管理,如何获取管理对象实例呢
使用ref属性来获取值,该ref会自动识别为spring中对象的名字
使用value属性来获取值,spring会认为仅仅是一个字符串值

依赖也可以是集合类型

<!--注入集合类型-->
    <bean id="student6" class="com.tulun.Spring.IOC.pojo.Student">
        <!--注入list类型-->
        <property name="bookName" >
            <list>
                <value>语文</value>
                <value>数学</value>
                <value>英语</value>
            </list>
        </property>


        <!--注入map类型-->
        <property name="bookScore">
            <map>
                <entry key="语文" value="98.7"/>
                <entry key="数学" value="99"/>
            </map>
        </property>
    </bean>

基于注解形式注入依赖

@Value :注入普通类型属性
@Resource :注入对象类型
@Autowired :注入对象类型

@Value
该注解只能添加到普通类型上, @Value(“1”)注解中可以赋值完成对基础属性的依赖注入

@Component(value = "student")
public class Student {
    @Value("1")
    private Integer id;
}

@Resource
该注解是注入对象类型
是有Java 提供的,注意不是spring框架提供,默认按照类型来查找并注入类

@Component(value = "student")
public class Student {
    //自定义类型
   @Resource(name = "user")
    private User user;

@Autowired
注入对象类型 ,是Spring框架提供的,按照名称来注入

@Component(value = "student")
public class Student {
    //自定义类型
   @Autowired
    private User user;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring(DI) 的相关文章

  • 在java中切换imageIcon?

    我有很多在窗口中移动的平面 线程 我想根据平面的方向切换 ImageIcon 例如 如果飞机向右飞行 则飞机的 imageIcon 是向右的 然后飞机向左飞行 则将 imageIcon 交换为飞机向左 我怎样才能在方法paintCompon
  • 在 Java/Android 中检查字符串是否包含 URL 的最佳方法是什么?

    在 Java Android 中检查字符串是否包含 URL 的最佳方法是什么 最好的方法是检查字符串是否包含 com net org info 其他 或者有更好的方法吗 url 输入到 Android 中的 EditText 中 它可以是粘
  • Java 7 watchservice获取文件更改偏移量

    我刚刚尝试使用 Java 7 WatchService 来监视文件的更改 这是我敲出的一些代码 WatchService watcher FileSystems getDefault newWatchService Path path Pa
  • 如何在 Spring 5 MVC 中将 FilePart 转换为 byte[]

    我有从网络表单接收和上传文件的控制器方法 如何从 FilePart 中提取字节数组并将其保存到数据库 我可以通过使用 FilePart transferTo 将 FilePart 保存到文件中来完成此操作 但这看起来又慢又难看 有更好的方法
  • 为什么这不会绘制图像?

    我想做的是 当我运行应用程序时 它会启动线程并且图像显示 3 秒 3000 毫秒 然后线程停止运行 图片路径正确 图片文件存在 线程本身运行 但是 图像似乎没有显示 可能出什么问题了 这是我的代码 package org main impo
  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • Java Swing透明JPanel问题

    我有一个 JLayeredPane 其中添加了 3 个 JPanel 我将 JPanel 设为透明 未设置背景并 setOpaque false 我在 JPanel 上绘制线条 只有最后添加的 JPanel 上的线条可见 其他 JPanel
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 可以显式删除 lambda 的序列化支持

    As 已经知道 https stackoverflow com a 22808112 2711488很容易添加序列化当目标接口尚未继承时支持 lambda 表达式Serializable 就像 TargetInterface Seriali
  • JUnit 测试方法无法返回值

    为什么 JUnit 测试方法无法返回值 文档 https junit org junit5 docs current user guide writing tests classes and methods说 强调我的 测试方法和生命周期方
  • java.lang.IllegalArgumentException:比较方法违反了其一般契约[重复]

    这个问题在这里已经有答案了 您好 下面是我的比较器的比较方法 我不确定出了什么问题 我在堆栈溢出上查找了其他类似标题的问题和答案 但不确定我的方法出了什么问题 但我不断收到 java lang IllegalArgumentExceptio
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • 如何调试内部错误?

    所以我有课Foo最终应该调整并重新加载类 它也有一个方法 private void redefineClass String classname byte bytecode ClassFileLocator cfl ClassFileLoc
  • Spring的@PreDestroy导致随机记录而不记录

    我正在使用 Spring 并且在终止时我让 PreDestroy 清理 bean 我不明白为什么日志记录有时会成功 而有时会失败 Using Log4j2 Logger log LogManager getLogger MyClass cl
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 测试 Hessian remoting-servlet.xml

    我们使用 Hessian 来实现富客户端和服务器之间的通信 由于移动和重命名 remoting servlet xml 中的条目有时会与实际的类名不匹配 因此 我正在寻找一种简单的方法来测试远程处理 xml 有没有简单的方法可以做到这一点
  • Kotlin 中的枚举类对于 Android 来说是否像 Java 中那样“昂贵”?

    Are EnumKotlin 中的类对于 Android 来说 昂贵 就像 Java 一样 还可以用吗 IntDefs or StringDefs在科特林 当我将 Kotlin Enum 类反编译为 Java 类时 底层仍然使用了 Java
  • java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException

    我想将 apache cli 添加到我的应用程序中 但我有问题 当我尝试运行它时显示这些错误 Error A JNI error has occurred please check your installation and try aga
  • 为什么ArrayList的非静态内部类SubList有一个成员变量“parent”?

    java util ArrayList SubList 是 java util ArrayList 的非静态内部类 这意味着它保存对其封闭类的引用 我们可以使用ArrayList this来访问java util ArrayList的成员
  • Android,Volley请求,响应阻塞主线程

    使用 Volley 处理较大响应时会发生一些不好的事情 String url AppHelper DOMAIN service pages profile update json this infoTextView setText getS

随机推荐

  • 【C语言】指针题及解析

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 例一 需要考虑大小端问题 该例仅限32位平台 小端存储模式 in
  • requests.post()提取返回数据中的具体某个数值

    返回json数据是这样的 提取返回code rsp requests post url data jsonData headers headers timeout 3 json code rsp code if code 1000 prin
  • VRF配置

    SW 2既作为集团核心交换机 同时又使用相关技术将SW 2模拟为Internet交换机 实现集团内部业务路由表与Internet路由表隔离 那位大神能教教我这道题目要怎么做啊 转载于 https blog 51cto com 1432192
  • iOS开发之网络监听(二)SCNetworkReachability

    文章目录 判断当前网络是否可达 第一个参数 SCNetworkReachabilityRef类型的target 第二个参数 SCNetworkReachabilityFlags类型的flags SCNetworkReachability是S
  • 一个基于@DS动态数据库的Java远程数据库同步程序

    同步程序开发文档 一 开发目标 本程序为一同步程序 DAO层连接2个数据库 远程直连一个orcal数据库 读取数据后存入本地的mogdb数据库 两个数据库访问通过 DS 动态数据库切换 通过定时任务调用同步类 并保存同步日志到数据库 二 程
  • React Antd 前端生成cron表达式

    不知道你在玩游戏的时候是否发现过以下情况 1 玩某些游戏的时候 发现他的排行榜并不是时时更新的 而是每半个小时 或者一个小时更新一次 2 又比如很火的王者荣耀手游 它的日常任务 都是每天5点进行更新 那么 这些时间控制 到底是由谁控制得如此
  • 拼接json和数组

    function form2Json id var arr id serializeArray var jsonStr jsonStr for var i 0 i lt arr length i jsonStr arr i name arr
  • 如何做代码评审(code review)

    1 定义 Code Review 即日常所说的代码评审或代码回顾 主要是在软件开发的过程中 对功能源代码进行评审 其目的是找出并修正软件开发过程中出现的错误的过程 提高和改进代码质量的过程 2 目的 2 1 提前发现缺陷 code revi
  • 电阻的固有噪声(热噪声)

    电阻的固有噪声是指其自身产生的噪声 包括热噪声和过剩噪声 热噪声亦称白噪声 是由导体中电子的热震动引起的 它存在于所有电子器件和传输介质中 它是温度变化的结果 但不受频率变化的影响 热噪声是在所有频谱中以相同的形态分布 它是不能够消除的 由
  • css怎么跟html搞一起,css和html的四种结合方式

    1 在每个HTML标签上面都有一个属性 style 把css和HTML结合在一起 我是一只小小鸟 2 使用HTML的一个标签实现 css代码 div background color red color gray 3 在style标签里面
  • Java实现多线程下载文件

    这是本人在实际开发当中遇到的多线程下载文件并记录下来 public class DownloadUtil private String pathFile private String strFile private DownloadThre
  • 关于java中的泛型 T 和 ?的区别(转载+改动)

    T表示泛型 new的时候要加入泛型 更方便通用 表示不确定的类型 一般用在通配 Object表示java中所有类的父类 在集合中使用时要格外注意 jdk为了便于理解 用K表示键 V表示值 T表示type类型 E表示enum枚举 其实这四个都
  • 飞链云元宇宙、区块链、3D数字艺术品、AI绘画共创数字新生态

    2022 飞链云生态 飞链云元宇宙 区块链 3D数字艺术品 AI绘画共创数字新生态 本文地址 https feilianyun yuque com books share c2d90a1b 6bba 4d23 9fb8 65a011cf3a
  • SpringBoot解析json文件

    SpringBoot解析json文件 第一步 要有一个自定义的json文件 例如 文件名 user json username 张三 userage 20 username 莉莉 userage 18 第二步 要有一个实体类 例如 Data
  • linux vscode 基于 configurationProvider 设置提供的信息检测到 #include 错误

    代码正常 vscode经常性会出现include报错 大多数并不是includepath设置错误的原因 困扰了我好几天 结合大家的提示终于解决了问题 现在把方法分享给大家 希望对大家有帮助 解决办法 1 在命令行执行 gcc v E x c
  • Django 创建第一个web项目

    版本说明 python 3 7 0 django 3 0 6 Django 管理工具 django admin 部署虚拟环境 安装virtualenv pip install virtualenv i https mirrors aliyu
  • 开源技术选型手册 (china-pub 首发) -目 录

    第1章c闲话开源社区篇cc 第2章cWeb框架篇cc 2 1cStrutsc 2 2cSpringc 2 3cSeamcc 第3章c开源Web服务器c 3 1cApachecc 3 2cLighttpdcc 3 3cNginxc 第4章c应
  • 【MySQL】varchar转int类型的方法

    MySQL varchar转int类型的方法 CAST函数的使用 1 问题描述 获取一个表user中age的最大值 由于历史原因 age是varchar类型的 2 问题解决 方案一 select max cast sex as UNSIGN
  • Blender辅助工具集:M3插件

    1 MACHIN3tools M3 插件 一个辅助工具集 MACHIN3tools An Addon to Streamline Blender 3 3 and beyond by machin3 io https github com m
  • Spring(DI)

    DI Dependency Injection 即依赖注入 对象之间的依赖由容器在运行期决定 即容器动态的将某个依赖注入到对象自重 基于XML配置注入依赖 有参构造函数注入依赖 bean类实现有参构造函数 public class Stud