当前位置: 首页 > news >正文

spring4第4课-ioc控制反转-详解如何注入参数

坚持住,第四天,继续学习spring4.详解如何注入参数

先总结,主要有如下6种:

1,基本类型值;
2,注入 bean;
3,内部 bean;
4,null 值;
5,级联属性;
6,集合类型属性;

详解如下:↓↓↓↓↓

1,基本类型值;(前面第3课的依赖注入的属性注入就是基本类型注入参数,这里不赘述)

    <bean id="people2" class="com.java1234.entity.People">

          <property name="id" value="1"></property>

          <property name="name" value="张三"></property>

           <property name="age" value="11"></property>
    </bean>


2,注入 bean;(第2课也学过,就是bean里面在ref引用另外一个bean,这里不赘述)

bean.xml内容

<bean id="dog1" class="com.java1234.entity.Dog"><property name="name" value="Jack"></property>
</bean>
<bean id="people2" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="张三"></property><property name="age" value="11"></property><!--这里的dog是People类内定义的1个对象类名,而dog1是文件上面定义过的一个bean --><property name="dog" ref="dog1"></property>  
</bean>

People类的内容:

public class People {private int id;private String name;private int age;private Dog dog;   // 和bean.xml的name的dog一致

。。。。。。。。

}

3,内部 bean;(只能被内部引用,类似java的内部类)

<bean id="people3" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="张三"></property><property name="age" value="11"></property><property name="dog"> <!--和第2种的差异就是,这里不用ref属性了,使用bean标签定义内部类--><bean class="com.java1234.entity.Dog">    <!--用bean标签 定义内部类--><property name="name" value="Tom"></property></bean></property>
</bean>

4,null 值;(这玩意,用于强制清空默认值,避免隐式逻辑导致的意外行为)

  使用频率较低 , 随便看看跳过吧

当需要为 Bean 属性或构造函数参数赋予 null 值时,使用 null 标签明确指示,避免 Spring 容器尝试注入默认值或抛出异常。

<bean id="people4" class="com.java1234.entity.People"><property name="id" value="1"></property><property name="name" value="张三"></property><property name="age" value="11"></property><property name="dog"><null></null>   <!-- null标签 表示没有dog--></property>
</bean>

目前流行的强制清空默认值的替代处理方式是注解驱动,比如

4.1):使用 @Value 注入 null

@Component  
public class DataService {  @Value("#{null}") // SpEL 显式赋 null  private String customStrategy;  
}  

4.2 条件化 Bean 注入

@Configuration  
public class AppConfig {  @Bean  @ConditionalOnProperty(name = "feature.cache.enabled", havingValue = "false")  public CacheManager cacheManager() {  return null; // 直接返回 null Bean  }  
}  


5,级联属性; (不常用,跳过)
6,集合类型属性; 

三种集合类型List,Set,Map 以及Props(有点类似map,主要用于配置系统参数等),

几种标签写法有差异,熟悉下,用时备查就行

    <bean id="people6" class="com.java1234.entity.People">
        <property name="id" value="1"></property>
        <property name="name" value="张三"></property>
        <property name="age" value="11"></property>
        <property name="dog" ref="dog1"></property>
        <property name="hobbies">  <!-- 设置集合 -->
            <list>
                <value>唱歌</value>
                <value>跳舞</value>
            </list>
        </property>
        <property name="loves">
            <set>
                <value>唱歌2</value>
                <value>跳舞2</value>
            </set>
        </property>
        <property name="works">
            <map>
                <entry>
                    <key><value>上午</value></key>
                    <value>写代码</value>
                </entry>
                <entry>

                    <key><value>下午</value></key>
                    <value>测试代码</value>
                </entry>
            </map>

        </property>
        <property name="addresses">
            <props>
                <prop key="address1">aaaaa</prop>
                <prop key="address2">bbbbb</prop>
            </props>
        </property>
    </bean>

http://www.xdnf.cn/news/704305.html

相关文章:

  • Flutte ListView 列表组件
  • 主流Markdown编辑器的综合评测与推荐
  • <el-date-picker>组件传参时,选中时间和传参偏差8小时
  • allWebPlugin中间件VLC专用版之录像功能介绍
  • 测试Bug篇
  • Flutter GridView网格组件
  • 测试概念 和 bug
  • 003 flutter初始文件讲解(2)
  • 使用 Flutter 开发 App 时,想要根据 Figma 设计稿开发出响应式 UI 界面
  • 基于python脚本进行Maxwell自动化仿真
  • 代码随想录算法训练营第五十三天
  • Oracle/openGauss中,DATE/TIMESTAMP与数字日期/字符日期比较
  • 计算机网络之差错控制中的 CRC(循环冗余校验码)
  • 软件工程 3.0:智能驱动的软件新时代
  • LVS+Keepalived高可用集群
  • Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制
  • LVS + Keepalived 高可用群集
  • Redis Stack常见拓展
  • K6 是什么
  • ubuntu24 安装MongoDB-6.0.24 数据库操作步骤和配置参数说明
  • QuickBASIC QB64 支持 64 位系统和跨平台Linux/MAC OS
  • 使用Redisson实现分布式锁发现的【订阅超时】Subscribe timeout: (7500ms)
  • AI绘画:Stable Diffusion从入门到精通(系列教程)
  • ONLYOFFICE文档API:编辑器的品牌定制化
  • 算法训练第二天
  • 【AI智能体】Coze 插件从使用到实战详解
  • 从法律层面剖析危化品证书:两证一证背后的安全逻辑
  • Perforce P4产品简介:无限扩展+全球协作+安全管控+工具集成(附下载)
  • Android 异步编程中协程的完整实战示例
  • OpenFeign vs MQ:微服务通信如何选型?详解同步与异步的适用场景