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>

相关推荐
何中应9 分钟前
请求头设置没有生效
java·后端
NPE~12 分钟前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化
Coder_Boy_16 分钟前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
亓才孓34 分钟前
[JDBC]批处理
java
春日见35 分钟前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
宋小黑1 小时前
JDK 6到25 全版本网盘合集 (Windows + Mac + Linux)
java·后端
念何架构之路1 小时前
Go进阶之panic
开发语言·后端·golang
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 小时前
Spring-cloud\Eureka
java·spring·微服务·eureka
先跑起来再说1 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
老毛肚1 小时前
手写mybatis
java·数据库·mybatis