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>

相关推荐
IMPYLH4 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草4 小时前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
爱找乐子的李寻欢4 小时前
线上批量导出 1000 个文件触发 OOM?扒开代码看本质,我是这样根治的
后端
vx_bscxy3224 小时前
告别毕设焦虑!Python 爬虫 + Java 系统 + 数据大屏,含详细开发文档 基于web的图书管理系统74010 (上万套实战教程,赠送源码)
java·前端·课程设计
字节拾光录4 小时前
Java工具库三足鼎立:Hutool、Apache Commons、Guava深度测评与场景化选型指南
java·apache·guava
爱学习的小可爱卢5 小时前
Java UDP编程实战:UDP数据报套接字编程DatagramPacket、DatagramSocket 、InetSocketAddress
java·udp·udp数据报
未来之窗软件服务5 小时前
幽冥大陆(三十五)S18酒店门锁SDK go语言——东方仙盟筑基期
java·前端·golang·智能门锁·仙盟创梦ide·东方仙盟·东方仙盟sdk
大鸡腿同学5 小时前
大量频繁记录有效击球方式
后端
r***93485 小时前
【Redis】在Java中以及Spring环境下操作Redis
java·redis·spring
稚辉君5 小时前
Gemini永久会员 01不等概率随机到01等概率随机
后端