Spring框架概述
1.sping
1.1 什么是spring
- Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。
- 分层: 一站式,每一个层都提供的解决方案
- web层:struts,spring-MVC
- service层:spring
- dao层:hibernate,mybatis
1.2 spring的优点
- 方便解耦,简化开发 (高内聚低耦合)
- AOP编程的支持
- 声明式事务的支持
- 方便程序的测试
- 方便集成各种优秀框架
- 降低JavaEE API的使用难度
2.spring IOC(依赖注入)
2.1 导入jar包
所需jar包:
spring-context.jar
spring-aop.jar
spring-beans.jar
spring-core.jar
spring-expression.jar
commons-logging.jar
2.2创建类
目录结构如下:
2.2.1
1.创建IAccountDao接口
public interface IAccountDao {
/**
* 保存账户信息
*/
void saveAccount();
}
2.创建AcountDaoImpl类实现IAccountDao接口
public class AccountDaoImpl implements IAccountDao {
public void saveAccount() {
System.out.println("成功保存账户!");
}
}
3.创建IAccountService接口
public interface IAccountService {
/**
* 保存账户
*/
void saveAccount();
}
4.创建applicationContext.xml文件
<bean>
标签里面的id属性最好与类名一致,class属性里面填创建该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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 把对象的创建交给spring管理-->
<bean id="accountService" class="com.lby.service.impl.AccountServiceImpl"/>
<bean id="accountDao" class="com.lby.dao.impl.AccountDaoImpl"/>
</beans>
5.创建AccountServiceImpl类实现IAccountService接口
public class AccountServiceImpl implements IAccountService {
public void saveAccount() {
//加载配置文件applicationContext.xml
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//创建配置文件applicationContext.xml中<bean>标签里面id叫accountDao的对象
IAccountDao iAccountDao = (IAccountDao) applicationContext.getBean("accountDao");
iAccountDao.saveAccount();
}
}
6.测试
创建一个测试类
public class test {
public static void main(String[] args) {
//加载配置文件applicationContext.xml
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//创建配置文件applicationContext.xml中<bean>标签里面id叫accountService的对象
IAccountService accountService=(IAccountService)applicationContext.getBean("accountService");
//创建配置文件applicationContext.xml中<bean>标签里面id叫accountDao的对象
IAccountDao iAccountDao=(IAccountDao)applicationContext.getBean("accountDao");
System.out.println(accountService);
System.out.println(iAccountDao);
accountService.saveAccount();
}
}
运行界面:
可以看到成功输出对象的地址,说明创建对象成功,对象也成功的调用了方法。
3.ApplicationContext
3.1 加载配置文件的方法
3.1.1 ApplicationContext 三个常用实现类:
1.ClassPathXmlApplicationContext(“XXX”):可加载类路径下的配置文件
//加载配置文件applicationContext.xml
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
2.FileSystemXmlApplicationContext(“XXX”):可加载磁盘任意路径下的配置文件(必须有访问权限)
ApplicationContext applicationContext=new FileSystemXmlApplicationContext("D:\\work\\SpringDemoday01\\src\\main\\resources\\applicationContext.xml");
3.AnnotationConfigApplicationContext():用于读取注解创建容器
3.1.2 核心容器的两个接口
1.ApplicationContext(常用)
构建核心容器,创建对象采用立即加载的方式,一读取完配置文件马上就创建配置文件中配置的对象
2.BeanFactory
创建对象采用延迟加载方式,什么时候根据bean标签里面的id获取对象,什么时候创建对象
4.创建bean的三种方式
1.<bean id="" class=""/>
<bean>
中只有id,class属性,采用默认构造函数,没有默认的构造函数则无法创建对象
2.使用工厂中的静态方法创建对象
步骤:
a.创建工厂
public class MyBeanFactory {
/**
* 创建实例
* @return
*/
public static IAccountService createService(){
return new AccountServiceImpl ();
}
}
b.applicationContext.xml配置
<!--
将静态工厂创建的实例交予spring
class确定静态工厂全限定类名
factory-method确定静态方法名
-->
<bean id="accountService" class="com.lby.factory.MyBeanFactory" factory-method="createService"></bean>
3.使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器中)
步骤:
a.创建工厂
public class MyBeanFactory {
/**
* 创建实例
* @return
*/
public IAccountService createService(){
return new AccountServiceImpl ();
}
}
b.applicationContext.xml配置
<!--创建工厂实例 -->
<bean id="myBeanFactory" class="com.lby.factory.MyBeanFactory"></bean>
<!-- 获得userservice
factory-bean 确定工厂实例
factory-method 确定普通方法
-->
<bean id="accountService " factory-bean="myBeanFactory" factory-method="createService"></bean>
5.bean的作用范围
5.1 bean标签的scope属性:
singleton:单例对象
prototype:多例对象
request:作用于web应用请求范围
session:作用于web应用会话范围
gloable-session:作用于集群环境的会话范围(全局会话范围)
6.bean对象的生命周期
单例对象:容器创建时出生(生命周期和容器一样)
多例对象:
出生:使用对象时创建
活着:使用过程中
死亡:当对象长时间不使用,由java垃圾回收机制清理