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的键值对-->

<key><value>上午</value></key>

<value>写代码</value>

</entry>
<entry>

<key><value>下午</value></key>

<value>测试代码</value>

</entry>
</map>

</property>

<property name="addresses">

<props> <!--有key 和 value的键值对-->

<prop key="address1">aaaaa</prop>

<prop key="address2">bbbbb</prop>

</props>

</property>

</bean>

相关推荐
LZQqqqqo17 分钟前
C# 中生成随机数的常用方法
java·算法·c#
葵续浅笑21 分钟前
LeetCode - 合并两个有序链表 / 删除链表的倒数第 N 个结点
java·算法·leetcode
2301_793086872 小时前
Springboot 04 starter
java·spring boot·后端
无限大64 小时前
只出现一次的数字:从暴力美学到位运算神技的进化之路
后端·面试
宇寒风暖4 小时前
Flask 框架全面详解
笔记·后端·python·学习·flask·知识
seabirdssss4 小时前
错误: 找不到或无法加载主类 原因: java.lang.ClassNotFoundException
java·开发语言
你的人类朋友4 小时前
❤️‍🔥为了省内存选择sqlite,代价是什么
数据库·后端·sqlite
还是鼠鼠5 小时前
tlias智能学习辅助系统--SpringAOP-进阶-通知顺序
java·后端·mysql·spring·mybatis·springboot
Pitayafruit5 小时前
Spring AI 进阶之路01:三步将 AI 整合进 Spring Boot
spring boot·后端·ai编程
君莫笑几人回5 小时前
关于记录一下“bug”,在做图片上传的时候出现的小问题
java·开发语言·spring boot