Spring负责管理项目中的所有对象。可以看做对象的管家。
一、Spring简单使用。
1、导入Jar包
2、创建一个对象
3、书写xml配置文件
src目录下:application.xml(任意的,建议这样做)
导入约束
1、preference->XML catalog->Add->File System选择要导入的约束文件(dtd/xsd约束)然后key type选择Schema location,在keys位置添加”/文件名“。
2、在application.xml中写一个< beans>标签,切换到Design视图右键beans选择Edit namespaces->Add,导入xsi;然后再次选择Add,选择Specify new namespace->Browse->select XML Catalog Entry,找到要导入的schema,然后复制去掉文件名的Location Hint到Namespace Names中去。定义prefix前缀,即可。
4、注册对象到容器中
二、IOC和DI
1、IOC(Inverse Of Control)反转控制
对象的创建以及依赖关系可以由spring完成创建和注入。反转控制就是反转了对象的创建方式,从我们自己创建反转给了程序(spring)。
2、DI(Dependency Injection)依赖注入
实现IOC思想需要DI作支持。
注入方式:(1)set方法注入
(2)构造方法注入
(3)(不推荐)字段注入
注入类型:(1)值类型注入
(2)引用类型注入
三、Spring创建对象的方式
1、空参构造方法(主要用这个)
<bean name="user" class="yf.javaking.bean.User"></bean>
2、静态工厂
//调用UserFactory的createUser静态方法创建名为user的对象放入容器中
<bean name="user" class="yf.javaking.bean.b_create.UserFactory" factory-method="createUser"></bean>
3、实例工厂
//调用UserFactory的非静态方法(因此需要先实例化该类才可以调用方法)的xml配置方法
<bean name="user" factory-bean="userFactory" factory-method="createUser"></bean>
<bean name="userFactory" class="yf.javaking.bean.b_create.UserFactory"></bean>
四、bean元素属性
1、scope属性
singleton(默认值):被标识为单例的对象在容器中只会存在一个实例。
prototype:多例原型。被标识为多例的对象每次在获得时才会创建。每次创建都是新的对象。
request:web环境下与request生命周期一致
session:web环境下与session生命周期一致
2、生命周期属性
配置一个方法作为生命周期初始化方法,spring容器会在对象创建之后立即调用。init-method
配置一个方法作为生命周期销毁方法,spring容器在关闭并销毁所有容器中的对象前使用。destroy-method
3、分模块配置
<import>
五、属性注入
(1)set方法注入
<bean name="user" class="yf.javaking.bean.User">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<!-- car为对象类型(car对象需要在xml中配置) -->
<property name="car" rel="car"></property>
</bean>
(2)构造函数注入
<!-- 构造函数注入 -->
<!-- name属性:构造函数的参数名 -->
<!-- index属性:构造函数的参数索引 -->
<!-- type属性:构造函数的参数类型 -->
<bean name="user" class="yf.javaking.bean.User">
<constructor-arg name="name" value="jerry" index="0" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>
(3)p名称空间注入
文件头导入:xmlns:p="http://www.springframeword.org/schema/p"
(4)spel注入
复杂类型注入(List之类的类型注入)
<!-- 复杂类型注入 -->
<bean>
<!-- 如果数组中只准备注入一个值(对象),直接使用value(ref)即可 -->
<property name="arr" value="tom"></property>
<!--array注入,多个元素注入 -->
<property name="arr">
<array>
<value>tom</value>
<value>jerry</value>
<ref bean="user4"/>
</array>
</property>
<!-- 如果list中只准备注入一个值(对象),直接使用value(ref)即可 -->
<property name="list" value="jack"></property>
<!-- list注入,多个元素注入 -->
<property name="list">
<list>
<value>jack</value>
<value>rose</value>
<ref bean="user3"/>
</list>
</property>
<!-- map类型注入 -->
<property name="map">
<map>
<entry key="url" value="jdbc:"></entry>
<entry key="user" value-ref="user4"></entry>
<entry key-ref="user3" value-ref="user2"></entry>
</map>
</property>
<!-- properties类型注入 -->
<property name="prop">
<props>
<prop key="driverClass">com.jdbc.mysql.Driver</prop>
<prop key="UserName">root</prop>
<prop key="PassWord">123</prop>
</props>
</property>
</bean>
六、在web.xml中配置容器随项目启动
需要导包:spring-web-4.2.4.RELEASE.jar
然后在使用中通过webApplicationContextUtils从application域中获取到spring容器