坚持住,第四天,继续学习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>