首页 > 其他分享 >Spring系列之(四)Spring的依赖注入

Spring系列之(四)Spring的依赖注入

时间:2024-02-27 20:58:14浏览次数:32  
标签:11 依赖 系列 22 33 Spring Bean 注入

Spring的依赖注入

在当前类需要用到其他类的对象,其他类的对象也是由Spring创建并将引用传递给当前类的对象的,我们只需要在配置文件中说明,说白了就是为当前类填充(也叫注入)其他类的对象

1. 能够注入的数据

能够注入的数据是指支持注入的这部分数据是可以被Spring填充(注入)到当前类的对象里的
如果是经常变化的数据,就不适合进行注入

  1. 基本类型和String
  2. 其他Bean类型(在配置文件中配置过或注解配置过的Bean)
  3. 复杂类型:集合类型
    复杂类型分两种结构,List结构集合(数组、List、Set)和Map结构集合(Map、Properties),结构相同,注入方式相同

2. 注入的方式

注入的方式就是如何为当前类填充(注入)其他类对象的引用,或者是如何将其他类对象的引用赋值给当前类的成员变量

  1. 构造函数
    优势:在获取Bean对象时,注入数据是必须的操作,否则对象无法创建成功
    劣势:改变了Bean对象的实例化方式,是我们在创建对象时,如果用不到这些数据,也必须提供
  2. set方法
    构造函数的优势就是set方法的劣势,构造函数的劣势就是set方法的优势
  3. 注解

3. 关于依赖注入的整合实例

3.1 使用构造函数方式注入基本类型、String、其他Bean类型数据

待注入的类
在这里插入图片描述
在这里插入图片描述
测试结果
在这里插入图片描述

3.2 使用set方法方式注入基本类型、String、其他Bean类型数据

待注入的类
在这里插入图片描述
在这里插入图片描述
测试结果
在这里插入图片描述

3.3 使用set方法方式注入复杂类型数据

待注入的类
在这里插入图片描述
beans.xml

<bean id="userService" class="com.itheima.service.impl.IUserServiceImpl">
        <property name="strs">
            <array>
                <value>11</value>
                <value>22</value>
                <value>33</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>11</value>
                <value>22</value>
                <value>33</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>11</value>
                <value>22</value>
                <value>33</value>
            </set>
        </property>
        <property name="map">
            <map>
                <entry key="a" value="b"></entry>
                <entry key="c">
                    <value>d</value>
                </entry>
            </map>
        </property>
        <property name="prop">
            <props>
                <prop key="a">b</prop>
                <prop key="c">d</prop>
            </props>
        </property>
    </bean>

此时,结构相同的集合类型注入时的标签可以用同一套

<bean id="userService" class="com.itheima.service.impl.IUserServiceImpl">
    <property name="strs">
        <list>
            <value>11</value>
            <value>22</value>
            <value>33</value>
        </list>
    </property>
    <property name="list">
        <list>
            <value>11</value>
            <value>22</value>
            <value>33</value>
        </list>
    </property>
    <property name="set">
        <list>
            <value>11</value>
            <value>22</value>
            <value>33</value>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key="a" value="b"></entry>
            <entry key="c">
                <value>d</value>
            </entry>
        </map>
    </property>
    <property name="prop">
        <map>
            <entry key="a" value="b"></entry>
            <entry key="c">
                <value>d</value>
            </entry>
        </map>
    </property>
</bean>

测试结果
在这里插入图片描述

标签:11,依赖,系列,22,33,Spring,Bean,注入
From: https://www.cnblogs.com/wzzzj/p/18038225

相关文章

  • Spring系列之(三)Spring对Bean的管理细节
    Spring对Bean的管理细节1.创建Bean的三种方式使用默认构造函数创建bean标签仅配置id和class,即标识和全限定类名,同时保证要创建的类是有无参构造函数的如果没有无参构造函数,将会报错使用某个类中的方法创建对象,该方法的返回值是某个类的对象以新建的Factory类为例,需......
  • Spring系列之(二)Spring基于XML的IOC实例
    Spring基于XML的IOC实例将改进后的工厂模式通过Spring来实现,解析配置文件、创建仓库,将对象存入仓库的过程都由Spring来做,我们只需要配置好配置文件,获取仓库中的对象即可1.在pom中引入Spring环境<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.o......
  • Spring系列之(一)Spring概述
    Spring概述1.程序的耦合耦合:程序间的依赖关系解耦:降低程序间的依赖关系分类类之间的依赖方法之间的依赖2.类之间的依赖问题的实例2.1JDBC操作数据库存在的耦合问题首先正常编写一个jdbc查询操作的类packagecom.itheima.jdbc;importjava.sql.*;publicclass......
  • spring boot 中使用MybatisPlus的自动填充createTime和updateTime
    首先需要在实体类的字段上加上注解,并且将类型更改为LocalDateTime@TableField(fill=FieldFill.INSERT)@JsonInclude(value=JsonInclude.Include.NON_NULL)@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateLocalDateTimecreateTime;@TableFie......
  • springboot学习过程中的特殊错误
     这是我在学习使用springboot过程中遇到的一个小问题,询问了gpt但是并没有解决我的报错,在网上浏览信息后最终知道了是哪里出了问题 就如这个好哥哥说的一样,mybatis自带的方法不会出现问题,所以问题出在了实体类定义上面,加了@Tableld的注解就解决了问题。......
  • 简单看下最近的Spring Secrurity、Spring漏洞(CVE-2024-22234、CVE-2024-22243)
    最近的这两个cve我看国内很多情报将其评为高危,所以想着去看看原理,看完发现都比较简单,利用要求的场景也相对有限(特别是第一个),所以就随便看下就行了SpringSecurity用户认证绕过(CVE-2024-22234)先看下官网的公告(https://spring.io/security/cve-2024-22234)InSpringSecurit......
  • spring重点后置处理器
    1.DefaultListableBeanFactory的作用:默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于beandefinition对象,是一个成熟的beanfactroy。最典型的应用是:在访问bean前,先注册所有的definition(可能从beandefinition配置文件中)。使用预先建立的bean定义元数......
  • springboot 统一处理请求非法参数
    通过拦截器和过滤器实现,话不多说上代码。1、重写HttpServletRequestWrapper读取body里面的内容。publicclassRequestWrapperextendsHttpServletRequestWrapper{privatefinalStringbody;publicRequestWrapper(HttpServletRequestrequest){super......
  • 如何创建自己的Spring Boot Starter并为其编写单元测试
    当我们想要封装一些自定义功能给别人使用的时候,创建SpringBootStarter的形式是最好的实现方式。如果您还不会构建自己的SpringBootStarter的话,本文将带你一起创建一个自己的SpringBootStarter。快速入门创建一个新的Maven项目。第三方封装的命名格式是xxx-spring-boo......
  • springboot2.6开始禁止循环依赖了
    参考文章: https://mp.weixin.qq.com/s?__biz=MzI0MTUwOTgyOQ==&mid=2247497189&idx=1&sn=0f03cdafad9bacef66c64a490b85ff23&scene=21#wechat_redirect使用了SpringBoot2.6及以上版本的,如果要允许循环依赖,可以作如下设置:方案二:允许循环引用此方案更像是绕过问题而非解决问题......