一、概述
Spring是一个分层的SE/EE一站式轻量级开源框架
一站式框架:有EE开发的每一层解决方案。
Web层:SpringMVC
Service层:Spring的Bean管理,Spring声明式事务
DAO层:Spring的JDBC模板,Spring的ORM模板
二、Spring的优势、
1、方便解耦,简化开发
通过Spring提供的IOC容器,可以将对象之间依赖关系交由Spring控制,以降低程序过度耦合。
2、AOP编程的支持
3、声明式事务的支持
4、方便集成各种优秀框架
三、IOC:Inversion of Control(控制反转)
耦合比如:
Class Service{ public void method(){ DAO dao = new DAOImpl(); dao.method(); } }
现在DAOImpl要换成DAOExtendImpl的话,就需要修改代码
Class Service{ public void method(){ DAO dao = new DAOExtendImpl(); dao.method(); } }
这样就会大大增加开发风险和成本。那能不能不修改代码情况下就能实现程序的扩展?
传统解决方案:使用工厂模式
实现Service与Dao之间的解耦,但是DAO与工厂有耦合,解决他们之间的耦合就使用配置文件,配置对象类型,通过反射创建对象。
Spring的解耦底层原理也是这样的,Spring已经提供了工厂,所以我们只需要配置对象类型就可以了。具体使用方式:
①、下载Spring的开发包
https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local
在springframework下找到spring,并展开,选择要下载的版本,展开它
②、解压
docs:Spring的开发规范和API
libs:Spring的开发jar和源码
schema:Spring的配置文件的约束
③、创建web项目,搭建环境
④、创建接口和实现类
public interface UserDAO { public void save(); }
public class UserDAOImpl implements UserDAO{ @Override public void save() { System.out.println("DemoDAOImpl..."); } }
⑤、将实现类交给Spring管理
Ⅰ、在src下新建applicationContext.xml
在spring的解压路径下找到spring-framework-4.2.4.RELEASEdocsspring-framework-referencehtmlxsd-configuration.html,并双击打开,找到 the beans schema,复制如下内容
<?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"> </beans>
Ⅱ、将UserDAO实现类配置
<?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.xxx.spring.demo.UserDAOImpl"></bean> </beans>
⑥、编写测试类
@Test public void demo1() { // 创建Spring的工厂 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); // 根据工厂获取对象 UserDAO userDAO = (UserDAO) applicationContext.getBean("userDAO"); userDAO.save(); }