spring一些入门基本配置内容
一、web项目中spring的jar包导入
初学spring只导入核心库中导入四个基本的库
二、一般在src中新建一个applicationContext.xml这个spring容器 【即 依赖注入 DI】
一般在src目录下
三、配置applicationContext.xml这个spring容器的约束
(有点复杂可以先空着)通过这个配置文件获得spring容器
四、applicationContext.xml中的Bean元素及元素中的属性用法作用:
class属性:被管理对象的完整(含路径)类名
name属性:获得对象时根据该名称获得
id属性:等价于name属性(很少使用一般使用name)
scope属性(作用范围属性):
singleton 默认值,单例的 (绝大多数使用默认值)
prototype 多例的 (在struts2中必须声明成prototype)
(下面两个没什么用的)
request web项目中,spring创建一个Bean对象,将对象存入到request域中
session web项目中,spring创建一个Bean对象,将对象存入到session域中
生命周期属性(如下):<bean中的方法>
init-method="" destory-method=""
五、生命周期(方法如上):
配置一个方法作为生命周期初始化方法,spring会在对象创建之后立即调用
配置一个方法作为生命周期销毁方法,spring容器在关闭并销毁所有容器中的对象之前调用
六、spring创建对象的方式
①空参构造
②静态工厂创建(很少使用)
创建一个工厂对象,里面声明一个静态方法创建对象
③实例工厂创建(很少使用)
创建一个工厂对象,里面声明一个方法创建对象,需要在容器里写两个Bean,用来实例化工厂对象
七、分模块配置
作用:项目庞大时,需要创建多个配置文件来配置许多对象,最后在引入总配置文件中
方法: <import resource="配置文件全路径"/>
八、spring属性注入
①set方法注入(最重要、最常用)
<!-- set方式注入: -->
<bean name="user" class="cn.itcast.bean.User" >
<!--值类型注入: 为User对象中名为name的属性注入tom作为值 -->
<property name="name" value="tom" ></property>
<property name="age" value="18" ></property>
<!-- 引用类型注入: 为car属性注入下方配置的car对象 ref为引用注入的属性方法-->
<property name="car" ref="car" ></property>
</bean>
<!-- 将car对象配置到容器中 -->
<bean name="car" class="cn.itcast.bean.Car" >
<property name="name" value="兰博基尼" ></property>
<property name="color" value="黄色" ></property>
</bean>
②构造函数注入(首先要有含参的构造函数)
(如何处理构造函数的重载) : name属性, index属性和type属性 可以锁定一个构造函数
<!-- 构造函数注入 -->
<bean name="user2" class="cn.itcast.bean.User" >
<!-- name属性: 构造函数的参数名 -->
<!-- index属性: 构造函数的参数索引 index="0"该属性属于参数第一个位置依次类推-->
<!-- type属性: 构造函数的参数类型 这个参数的类型-->
<constructor-arg name="name" index="0" type="java.lang.Integer" value="999" ></constructor-arg>
<constructor-arg name="car" ref="car" index="1" ></constructor-arg>
</bean>
③p名称注入(很少使用)
④spel注入(很少使用)
⑤复杂类型注入(例如数组array,map,list,Properties(配置文件也就是一个map)等)
array注入:
如果数组中只准备注入一个值(对象),直接使用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注入:
如果List中只准备注入一个值(对象),直接使用value|ref即可
<property name="list" value="jack" ></property>
<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:mysql:///crm" ></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">1234</prop>
</props>
</property>
九、spring中的概念
ioc: 反转控制,创建对象的方式反转了,交给spring程序来创建对象
di: 依赖注入,将必须的属性注入到对象当中,是实现ioc的前提
beanFactory和applicationContext
十、如何在web项目中使用Spring容器
①导包5个,在原有的基础上需要多一个spring-web
②配置listener,在web.xml中
listener的名称为:ContextLoaderListener
并且配置参数,指定spring配置路径
③在Action/Controller中,使用工具类获得容器
用Listener监听servletContext,项目中只创建一个容器, 所有action只从一个servletContext域中获得同一个容器,避免创建许多容器
获得容器的方法为:WebApplicationContextUtils.getWebApplicationContext(ServletContext sc)