一、XML配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<!-- set方式注入: -->
<bean name="user" class="com.lzp.bean.User">
<!-- 值类型注入:为User对象中名为name的属性注入jack作为值 -->
<property name="name" value="jack"></property>
<property name="age" value="21"></property>
<!-- 引用类型注入:为maserati属性注入下方配置的maseratis对象 -->
<property name="maserati" ref="maseratis"></property>
</bean>
<!-- 将Maserati对象配置容器中 -->
<bean name="maseratis" class="com.lzp.bean.Maserati">
<property name="name" value="宝马"></property>
<property name="color" value="钻石"></property>
</bean>
<!-- 构造函数注入 -->
<!-- 当有多个构造函数时可以用index或type属性指定用那个构造函
index="0":当前表示User对象age属性在构造函数中在第一个位置
index="1":当前表示User对象name属性在构造函数中在第二个位置
type:通过参数类型来确定走的那个构造-->
<bean name="user2" class="com.lzp.bean.User">
<constructor-arg name="name" value="007" index="1" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="age" value="17" index="0"></constructor-arg>
<constructor-arg name="maserati" ref="maseratis" index="2"></constructor-arg>
</bean>
<!-- p名称空间注入,其实还是走的set方法,spring新开发出来的注入方式
前提条件:导入p名称空间的引入地址xmlns:p="http://www.springframework.org/schema/p"
直接加入到beans根节点中去就OK
注入方法:值属性方式:p:属性值="值"
对象属性方式:p:属性名-ref="bean名称"-->
<bean name="user3" class="com.lzp.bean.User" p:name="tom" p:age="177" p:maserati-ref="maseratis">
</bean>
<!-- spel注入:spring Expression Language spinge表达语言
使用方法:value值可以获得其它对象的值来给当前对象属性赋值 -->
<bean name="user4" class="com.lzp.bean.User">
<!--获得user对象name的值 -->
<property name="name" value="#{user.name}"></property>
<!--获得user2对象age的值 -->
<property name="age" value="#{user2.age}"></property>
<property name="maserati" ref="maseratis"></property>
</bean>
<!-- 复杂类型的注入 -->
<bean name="coll" class="com.lzp.bean.CollectionBean">
<!-- 当数组中只准备注入一个值或对象时,可以直接使用value|ref -->
<!-- <property name="arr" value="lee"></property> 一个值情况-->
<property name="arr">
<array>
<value>brucelee</value>
<value>32</value>
<ref bean="user"/>
</array>
</property>
<!-- 当list注入一个值或对象时,可以直接使用value|ref -->
<!-- <property name="list" value="marry"></property> 一个值情况-->
<property name="list">
<list>
<value>mark</value>
<value>11</value>
<ref bean="user2"/>
</list>
</property>
<!-- 当Map注入值或对象时,可以直接使用value|ref -->
<property name="map">
<map>
<!-- key:字符串 value:字符串 -->
<entry key="name" value="tom"></entry>
<!-- key:字符串 value:对象 -->
<entry key="user" value-ref="user2"></entry>
<!-- key:对象 value:对象 -->
<entry key-ref="user" value-ref="user3"></entry>
</map>
</property>
<!-- properties类型注入-->
<property name="pro">
<props>
<prop key="lzp">lee</prop>
<prop key="tom">mark</prop>
<prop key="lee">brucelee</prop>
</props>
</property>
</bean>
</beans>
二、测试类
package com.lzp.injection;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.lzp.bean.CollectionBean;
import com.lzp.bean.User;
public class Demo {
//创建方式一,空参构造创建
@Test
public void test() {
//1、创建容器对象
ApplicationContext app = new ClassPathXmlApplicationContext("com/lzp/injection/applicationContext.xml");
//2、向容器“要”user对象
CollectionBean bean = (CollectionBean) app.getBean("coll");
//打印user对象
System.out.println(bean);
}
}