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>

相关推荐
BD_Marathon4 小时前
【Flink】部署模式
java·数据库·flink
鼠鼠我捏,要死了捏6 小时前
深入解析Java NIO多路复用原理与性能优化实践指南
java·性能优化·nio
ningqw6 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友6 小时前
vi编辑器命令常用操作整理(持续更新)
后端
superlls7 小时前
(Redis)主从哨兵模式与集群模式
java·开发语言·redis
胡gh7 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫8 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong8 小时前
技术人如何对客做好沟通(上篇)
后端
叫我阿柒啊8 小时前
Java全栈工程师面试实战:从基础到微服务的深度解析
java·redis·微服务·node.js·vue3·全栈开发·电商平台
颜如玉8 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源