IOC容器-实例化Bean、注入的4种配置方式(无注解方式)
有java类
@Data @NoArgsConstructor @AllArgsConstructor public class Addr { private String addr; }
@Data @AllArgsConstructor @NoArgsConstructor public class User { private String name; private Integer age; private Addr addr; //地址信息 }
第一种:基于Get/Set 框架使用反射创建对象,通过配置的class全限定名
<!-- get set--> <bean id="UserInfo" class="com.spring.domain.User"> <property name="name" value="孙旺"></property> <property name="age" value="18"></property> <property name="addr" ref="AddrInfo"></property> </bean> <bean id="AddrInfo" class="com.spring.domain.Addr"> <property name="addr" value="中国山东"></property> </bean>
property 标签为实体中的属性
-- name 属性为实体属性的变量名
-- value 属性为属性的值
-- ref 当注入属性为对象时使用ref注入
第二种:使用静态工厂方法创建对象
工厂类
public class BeanFactory { public static User getUser() { return new User("小王", 19, new Addr("中国山东")); }
}
此工静态工厂类的方法必须为static静态
<bean id="UserInfo2" class="com.spring.factory.BeanFactory" factory-method="getUser"></bean>
factory-method -- 静态工厂中,创建对象的方法
class -- 静态工厂的类的全限定名称
第三种:使用实例工厂方法创建对象
public class BeansFactory { public User getUser() { return new User("小王", 19, new Addr("中国山东")); } }
<bean id="UserFactory" class="com.spring.factory.BeansFactory"></bean> <bean id="UserInfo3" factory-bean="UserFactory" factory-method="getUser"></bean>
factory-bean -- 属性: 设置实例工厂对象的引用
factory-method -- 属性 : 设置实例工厂对象的方法,用于创建对象
<!--基于 构造方法--> <bean id="BeanUser" class="com.spring.domain.UserBean"> <constructor-arg name="name" value="小孙"></constructor-arg> <constructor-arg name="age" value="9"></constructor-arg> <constructor-arg name="list"> <array> <value>s1</value> <value>s2</value> </array> </constructor-arg>
</bean>
扩展
上面根据构造注入时注入了一个list,下面扩展
get/set 方法的复杂类型注入(构造注入时相同)
可以注入任意的数据类型:
-
基本数据类型及其包装类
-
引用数据类型【所有写得类】枚举、数组、集合【Map、List、Set】
@Data public class NewUser { //引用数据类型 private Addr addr; //声明成员变量 private String name; private String age; //多种数据类型成员变量 private String[] myStrs;//数组 private List<String> myList;//list集合 private Set<String> mySet;//set集合 private Map<String,String> myMap;//map }
<!--复杂映射--> <bean id="NewUser" class="com.spring.domain.NewUser"> <property name="addr" ref="newUserAddr"></property> <property name="name" value="小溪西"></property> <property name="age" value="99"></property> <!--list--> <property name="myList"> <array> <value>list1</value> <value>list2</value> </array> </property> <!-- map --> <property name="myMap"> <map> <entry key="k1" value="v1"></entry> <entry key="k2" value="v2"></entry> </map> </property> <!-- set --> <property name="mySet"> <set> <value>s1</value> <value>s2</value> </set> </property> <!-- arr[] --> <property name="myStrs"> <array> <value>[]1</value> <value>[]2</value> </array> </property> </bean> <bean id="newUserAddr" class="com.spring.domain.Addr"> <property name="addr" value="中国西藏"></property> </bean>