Spring配置详解
1. 配置bean元素 基本属性
<!--
配置bean元素
name:给对象起个名字
class 类的完整路径
id 唯一 里面不初选特殊字符 struts“/sadfAction” ·
-->
<bean name="user" class="cn.hd.test.User" id="user"></bean>
2.创建方式
<!--scope对象的创建方式
singleton 单例模式(默认)
prototype 多例模式(什么时候用什么时候创建 并且创建的方式每次重新new )
了解 不用
request web环境下 对象的生命周期和request一样
session web环境下 对象的生命周期和session一样
-->
一般情况下全都用默认的
多例模式 在整合struts2的时候必须用多例模式
3.创建生命周期的方法
在对象创建后马上就执行一个方法,对象销毁前执行一个方法
<bean name="user" class="cn.hd.test.User" id="user" init-method="init" destroy-method="destroy"></bean>
在这个user类中 书写init和destroy方法
测试,可以手动的去销毁对象 调用ClassPathXmlApplicationContext的close
注意:销毁对象 对象必须是单例的 如果是多里的无法手动销毁
4.Spring创建对象的方式
(1)无参数的构造函数(重点使用)
(2)静态工厂实例化
<bean name="userFactory" class="cn.hd.test.UserFactory" factory-method="createUser"></bean>
并且创建一个UserFactory该类中提供一个静态createUser
public static User createUser(){
System.out.println("调用了静态工厂");
return new User();
}
(1)实例化工厂创建
<bean name="userFactory1" class="cn.hd.test.UserFactory"></bean>
<bean name="user1" factory-bean="userFactory1" factory-method="createUser1"></bean>
public User createUser1(){
System.out.println("实例化工厂");
return new User();
}
对象属性的注入
(1) get-set注入(最重要的)
基本属性 8打基础类型
<bean name="car" class="cn.hd.injection.Car">
<property name="name" value="小鸟电动车"></property>
<property name="color" value="红色"></property>
</bean>
name 类属性名 value属性值
引用属性 对象
<bean name="user" class="cn.hd.injection.User">
<property name="name" value="赵塞昌"></property>
<property name="age" value="13"></property>
<property name="car" ref="car"></property>
</bean>
name 类的属性名 ref 引用的bean 的name
(2) 构造函数注入
<bean name="user1" class="cn.hd.injection.User">
<constructor-arg name="name" value="李超杰" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg name="age" value="18" index="1"></constructor-arg>
</bean>
name value (ref) index type
属性 具体的值 参数的位置 参数的类型
(3) p’空间注入(最简单)但是 业界不认可 还是使用<property>
第一步导入约束
xmlns:p=http://www.springframework.org/schema/p
http://www.springframework.org/schema/p
<bean name="user2" class="cn.hd.injection.User" p:age="12" p:name="赵傻强" p:car-ref="car"></bean
(4) spel注入类似于El和ognl表达式
<bean name="user3" class="cn.hd.injection.User">
<property name="name" value="#{user2.name}"></property>
<property name="car" value="#{car}"></property>
</bean>
复杂类型的注入
数组
Arr
<bean name="collectionBean" class="cn.hd.injection.CollectionBean">
<!--数组中的元素只有一个那么它的配置和基本类型一样-->
多个数据
<!-- <property name="arr" value="1"></property>-->
<property name="arr">
<array>
<value>赵四</value>
<value>赵五</value>
<ref bean="car"></ref>
</array>
</property>
</bean>
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
Object[]arr=collectionBean.getArr();
for (Object o:arr){
System.out.println(o);
List / set
<!--list集合中只有一个元素配置和基本类型一样-->
<!--<property name="list" value="1"></property>-->
<property name="list">
<list>
<value>李四</value>
<value>李五</value>
<ref bean="user1"></ref>
</list>
</property>
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
List list=collectionBean.getList();
for (Object o:list){
System.out.println(o);
map
键值对 key key-ref value value-ref Map<k,v>
<property name="map">
<map>
<entry key="name" value="赵二"></entry>
<entry key="user" value-ref="user2"></entry>
<!--<entry key="user" key-ref="" ></entry>-->
CollectionBean collectionBean = (CollectionBean) ac.getBean("collectionBean");
Map map = collectionBean.getMap();
String name = (String) map.get("name");
System.out.println(name);
User user = (User) map.get("user");
System.out.println(user);
Properties
<property name="properties">
<props>
<prop key="driverClass">com.sun</prop>
<prop key="jdbcUrl">jdbc://localhost:3306/...</prop>
<prop key="user">root</prop>
</props>
</property>
模块化
<import resource="classpath:applicationContext.xml"></import>
resource 其他配置文件的地址