Spring环境搭建
导jar包
spring核心开发包
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
spring日志包
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
创建一个javabean 用Spring 管理 (装入Spring容器中)
public class User {
private String username;
private int age;
public User() {
}
...
添加约束(添加约束过程省略)
xmlns:beans="http://www.springframework.org/schema/beans"
spring中对象创建的三种方式
- 空参的构造方法
(id和name的意思作用差不多)
<bean id="user" class="com.bean.User"> </bean>
<bean name="user" class="com.bean.User"> </bean>
- 静态工厂方式
<bean name="user" factory-method="createStaticUserFactory" class="com.factory.UserFactory"></bean>
- 实例工厂方式
实例工厂创建首先要创建工厂的对象
faactory-bean:工厂的对象
factory-method:工厂的方法
<bean name="userFactory" class="com.factory.UserFactory"></bean>
<bean name="user2" factory-bean="userFactory" factory-method="createUserFactory"></bean>
spring中属性注入的4种方式
- set方法注入(推荐使用)
<bean name="user" class="com.bean.User">
<property name="username" value="李逍遥"></property>
<property name="age" value="18"></property>
<!--引用对象类型注入 将cat对象作为属性 ref表示需要引用其他的对象 -->
<property name="cat" ref="cat"></property>
</bean>
<!--准备一个cat对象 可以被其他对象引用 -->
<bean name="cat" class="com.bean.Cat">
<property name="name" value="英短"></property>
<property name="color" value="蓝色"></property>
</bean>
- 构造方法注入
index:表示参数的索引顺序从0开始;
type:表示参数的类型
<bean name="user1" class="com.bean.User">
<constructor-arg name="username" value="赵灵儿" index="0" type="java.lang.String" ></constructor-arg>
<constructor-arg name="age" value="18" index="1" type="int" ></constructor-arg>
<!--引用对象类型注入 将cat对象作为属性 ref表示需要引用其他的对象 -->
<constructor-arg name="cat" ref="cat1"></constructor-arg>
</bean>
<!--准备一个cat对象 可以被其他对象引用 -->
<bean name="cat1" class="com.bean.Cat">
<property name="name" value="折耳猫"></property>
<property name="color" value="白色"></property>
</bean>
- p名称空间注入:实质是set注入
需要导入 p 命名空间;p:属性名=" “;如果是引用对象类型:p:属性名-ref=” "
xmlns:p="http://www.springframework.org/schema/p"
<bean name="user2" class="com.bean.User" p:username="林月如" p:age="18" p:cat-ref="cat2"></bean>
<!--准备一个cat对象 可以被其他对象引用 -->
<bean name="cat2" class="com.bean.Cat">
<property name="name" value="大橘猫"></property>
<property name="color" value="橘色"></property>
</bean>
- spel注入( 基本没有)
spel ,主要是用来取值的,取出其他容器对象的值
<!--准备一个对象-->
<bean name="users" class="com.bean.User">
<property name="username" value="李逍遥"></property>
<property name="age" value="18"></property>
</bean>
<bean name="user3" class="com.bean.User">
<property name="username" value="#{users.username}"></property>
<property name="age" value="#{users.age}"></property>
<property name="cat" ref="cat3"></property>
</bean>
<!--准备一个cat对象 可以被其他对象引用 -->
<bean name="cat3" class="com.bean.Cat">
<property name="name" value="野猫"></property>
<property name="color" value="花色"></property>
</bean>
生命周期: 有两个相关的属性( 对象中的方法 肯定需要对象调用)
init-method:当前对象创建之后立即调用的方法
destroy-method:当前对象被销毁的时候调用 :Spring容器被关闭之前 销毁所有对象
<bean name="user" class="com.bean.User" init-method="init"destroy-method="destroy"></bean>
复杂的类型注入:
pojo
public class Vo {
private Object[] arr;// 数组类型注入方式
private List list;// 集合类型注入方式
private Map map;// map集合
private Properties properties;// properties类型
- 数组注入
applicationContext.xml
<!--数组类型注入方式 -->
<bean name="vo" class="com.bean.Vo">
<property name="arr">
<array>
<value>围城</value>
<value>22</value>
<ref bean="cat" />
</array>
</property>
</bean>
- list集合注入
applicationContext.xml
<bean name="vo1" class="com.bean.Vo">
<property name="list">
<list>
<value>张爱玲</value>
<value>001</value>
<ref bean="user" />
</list>
</property>
</bean>
- map注入
applicationContext.xml
<bean name="vo2" class="com.bean.Vo">
<property name="map">
<map>
<entry key="name" value="韩寒"></entry>
<entry key="car" value="小毛驴"></entry>
<entry key-ref="" value-ref=""></entry>
</map>
</property>
</bean>
- properties注入
applicationContext.xml
<bean name="vo3" class="com.bean.Vo">
<property name="properties">
<props>
<prop key="name">鲁迅</prop>
<prop key="haha">11</prop>
<prop key=""></prop>
</props>
</property>
</bean>
分模块配置
Spring通过<import resource=” "/>分模块配置导入其他Spring配置文件,可以不用将所有的配置写在一个文件里,结构清晰,方便管理
<import resource="applicationContext01.xml" />