一、Spring开发步骤
(1)在 pom.xml 中引入Spring相关依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.15</version>
</dependency>
(2)创建Bean
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("save...");
}
}
(3)创建资源文件 applicationContext.xml,配置Bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="userDao" class="com.linge.dao.impl.UserDaoImpl" ></bean>
</beans
(4)创建 ApplicationContext 对象,调用getBean()方法
@Test
public void test(){
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) app.getBean("userDao");
userDao.save();
}
二、Bean的配置
<bean id="userDao" class="com.linge.dao.impl.UserDaoImpl" ></bean>
用于配置对象,交由Spring来创建。
默认调用的时无参构造器
。若没有无参构造器,则不能创建成功。
2.1 基本属性
属性 | 描述 |
---|---|
id | Bean实例在Spring容器中的唯一标识 |
class | Bean的权限的名称 |
scope | 指定对象的作用范围 |
init-method | 指定类中初始化方法名称 |
destory-method | 指定类中销毁方法名称 |
2.1.1 scope
指定对象的作用范围,取值如下:
取值范围 | 说明 |
---|---|
singleton | 默认值,单例的 |
prototype | 多例的 |
request | WEB项目中,Spring创建一个Bean的对象,将对象存放在request域中 |
session | WEB项目中,Spring创建一个Bean的对象,将对象存放在session域中 |
global session | WEB项目中,应用在Portlet环境,若没有Portlet环境,则globalSession相当于一个session |
(1)singleton
Bean的实例化个数:只有1个
Bean的创建时机:当Spring和核心文件被加载时,实例化Bean
Bean的生命周期:
- 创建:当应用加载,创建容器时
- 运行:只要容器在,对象就一直存活
- 销毁:应用卸载,销毁容器时
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
System.out.println(userDao1);
System.out.println(userDao2);
结果:
UserDaoImpl被创建
com.linge.dao.impl.UserDaoImpl@441772e
com.linge.dao.impl.UserDaoImpl@441772e
(2)prototype
Bean的实例化个数:多个
Bean的创建时机:调用getBean()方法时
Bean的生命周期:
- 创建:当应使用对象,创建新的对象实例
- 运行:只要对象在使用中,对象就一直存活
- 销毁:对象长时间不使用,被垃圾回收机制回收
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao1 = (UserDao) app.getBean("userDao");
UserDao userDao2 = (UserDao) app.getBean("userDao");
System.out.println(userDao1);
System.out.println(userDao2);
结果:
UserDaoImpl被创建
UserDaoImpl被创建
com.linge.dao.impl.UserDaoImpl@402bba4f
com.linge.dao.impl.UserDaoImpl@795cd85e
2.1.2 init-method 和 destory-method
(1)在类中定义两方法
public class UserDaoImpl implements UserDao {
public void init(){
System.out.println("初始化");
}
public void destory(){
System.out.println("销毁");
}
@Override
public void save() {
System.out.println("save...");
}
}
(2)配置
<bean id="userDao" class="com.linge.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"></bean>
2.2 Bean实例化的三种方式
2.2.1 无参构造方法实例化
<bean id="userDao" class="com.linge.dao.impl.UserDaoImpl" ></bean>
2.2.2 工厂静态方法实例化
(1)创建静态工厂类
public class StaticFactory {
public static UserDao getUserDao(){
return new UserDaoImpl();
}
}
(2)配置
<bean id="userDao" class="com.linge.factory.StaticFactory" factory-method="getUserDao"></bean>
2.2.3 工厂实例方法实例化
(1)创建工厂类
public class DynamicFactory {
public UserDao getUserDao(){
return new UserDaoImpl();
}
}
(2)配置
<bean id="factoty" class="com.linge.factory.DynamicFactory"></bean>
<bean id="userDao" factory-bean="factoty" factory-method="getUserDao"></bean>