一、Spring的概述
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring的核心:
1.IoC(Inversion of Control 控制反转): 将对象创建权利交给Spring工厂进行管理。
2.AOP(Aspect Oriented Programming 面向切面编程),基于动态代理的功能增强方式。
spring的优势:
1.解耦合,简化开发:通过Spring提供的IOC容器,将对象间的依赖关系交给Spring进行控制
2.AOP编程的支持:方便进行面向切面的编程
3.声明式事务的支持:通过声明式灵活的管理事务
到底什么才是控制反转呢?(工厂+反射+配置文件)
所谓的控制反转,其实就是将原来主动创建对象的权利变成由工厂来创建,然后从工厂中获取对象。
二、Spring基于xml的IOC配置
Spring的IOC的配置:(实现方式:工厂(设计模式)+反射(机制) + 配置文件)
a)创建spring的配置文件 applicationContext.xml
b)初始化Spring的IOC容器获取Spring的工厂,通过spring的工厂获取容器中的对象
下面是Spring基于xml的一个简单的demo:
通过spring来创建对象并且将其装配到spring的IOC容器中,步骤如下:
1、 创建spring的配置文件
2、 导入spring的IOC所需依赖
3、 通过spring的IOC创建对象并装配到IOC容器中
4、 初始化spring的IOC容器并获取工厂,通过工厂从IOC容器中获取bean
业务层接口:
public interface IAccountService {
void saveAccount();//模拟添加账户
}
实现类:
public class AccountServiceImpl implements IAccountService {
//手动初始化
private IAccountDao accountDao = new AccountDaoImpl();
@Override
public void saveAccount() {
accountDao.saveAccount();
}
}
持久层接口:
public interface IAccountDao {
void saveAccount();
}
实现类:
public class AccountDaoImpl implements IAccountDao {
@Override
public void saveAccount() {
System.out.println("保存账户");
}
}
配置文件:通过Spring的IOC来创建对象
<?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">
<!-- spring 将自己管理的资源统称为bean
id:资源标识名称,相当于properties中的key,通过该名称可以获取对象
class:资源路径,一般是实现类的全路径
-->
<!-- 将service实现类装配到容器中 -->
<bean id="accountService" class="cn.itcast.service.impl.AccountServiceImpl"></bean>
<!-- 将dao实现类装配到容器中 -->
<bean id="accountDao" class="cn.itcast.dao.impl.AccountDaoImpl"></bean>
</beans>
表现层:
public class Client {
public static void main(String[] args) {
//加载配置文件,获取spring工厂,从容器中获取dao和service的实现类
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//从容器中获取service
IAccountService accountService = (IAccountService) ac.getBean("accountService");
System.out.println(accountService);
//从容器中获取dao
IAccountDao accountDao = (IAccountDao) ac.getBean("accountDao");
System.out.println(accountDao);
}
}
三、Spring中工厂的结构
----BeanFactory接口:Spring容器的顶层接口
------------ApplicationContext接口 (我们常用的接口,对BeanFactory的扩展):
------------------------基于xml配置的两个实现类
--------------------------------1)ClassPathXmlApplicationContext:
--------------------------------2)FileSystemXmlApplicationContext
------------------------基于注解配置的两个实现类
--------------------------------1)AnnotationConfigApplicationContext:
**BeanFactory和ApplicationContext的区别**: BeanFactory:延迟加载,ApplicationContext立即加载
四、Spring的配置文件
1)bean标签的配置
bean作用: 用于配置对象让 spring 来创建的。
默认