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>

相关推荐
Pniubi4 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko74 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师4 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.4 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼5 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
马良神笔6 小时前
2026 年Rag最近技术前沿总结
后端·python·django
程序猿DD6 小时前
同样10美元,OpenDesign和Command Code的DeepSeek V4.1 Flash额度到底有多少?
后端
福兮说7 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
高频因子挖掘机7 小时前
A股量化从日线升级到5分钟线:数据量增加后最先暴露哪些工程问题?
后端·github·api
高频因子挖掘机7 小时前
历史行情返回顺序变了,为什么按行号计算指标很危险?
后端·github·api