2、spring程序开发步骤
2.1、spring程序开发步骤
步骤:
①导入spring开发基本包的坐标 ==》导入maven依赖
②编写Dao接口和实现类 ==》创建Bean
③创建spring核心配置文件 ==》创建applicationContext.xml
④在spring配置文件中配置UserDaoImpl ==》在配置文件中进行配置
⑤使用spring的API获得Bean实例 ==》创建ApplicationContext对象getBean
2.2、Bean标签基本配置
用于配置对象交由spring来创建。默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。
2.2.1、bean的基本属性:
- id:Bean实例在容器中的唯一标识
- class:Bean的全限定名称(反射默认无参构造创建)
- scope:指对象的作用范围,取值如下:
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 |
prototype | 多例的 |
request | web项目中,spring创建一个bean对象,将对象存入到request域中 |
session | web项目中,spring创建一个bean对象,将对象存入到session域中 |
global session | web项目中,应用在portlet环境中,如果没有portlet环境那么globalsession相当于session |
当scope的取值为 singleton 时:
bean的实例化个数:1个
bean的实例化时机:当spring核心文件被加载时,bean被实例化
bean的生命周期:
- 对象创建:当应用加载,创建容器时,对象就被创建了
- 对象运行:只要容器在,对象一直活着
- 对象销毁:当应用卸载,销毁容器时,对象就被销毁了
当scope的取值为 prototype 时:
bean的实例化个数:多个
bean的实例化时机:当调用getBean()方法时,bean被实例化
bean的生命周期:
- 对象创建:当使用对象时,创建新的对象实例
- 对象运行:只要对象在使用中,对象一直活着
- 对象销毁:当长时间不使用时,会被Java垃圾回收器回收
2.2.2、bean实例化的三种方式
- 无参构造方法实例化
<bean id="user" class="com.spongebob.pojo.User"></bean>
- 工厂静态方法实例化
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
<bean id="user" class="com.spongebob.factory.StaticFactory" factory-method="getUserDao"></bean>
- 工厂实例方法实例化
public class DynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
<bean id="factory" class="com.spongebob.factory.DynamicFactory" ></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>
2.2.3、bean的依赖注入
Dependency Injecttion 是spring框架核心IOC的具体实现。
在编写程序时,通过控制反转,把对象的创建交给了spring,但是代码中不可能出现没有依赖的情况。IOC解耦只是降低他们的依赖关系,但是不会消除。例如:业务层仍会调用持久层的方法。
那种业务层和持久层的依赖关系,在使用spring之后,就让spring来维护了。简单说,就是坐等框架把持久层对象传入业务层,而不需要我们自己去获取。
注入方式:
- 构造方法
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public UserService() {
}
public void save() {
userDao.save();
}
}
<bean id="userDao" class="com.spongebob.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.spongebob.service.UserService">
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
- set方法
- 、简便方式
P命名空间注入本质也是set方法注入,但比起上述的set方法注入更加方便,主要体现在配置文件中:
首先引入P命名空间:
xmlns:p="http://www.springframework.org/schema/p"
其次,需要修改注入方式:
<bean id="userService" class="com.spongebob.service.UserService" p:userDao-ref="userDao"/>
2)、常用set注入方式
<bean id="userDao" class="com.spongebob.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.spongebob.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>