1. Spring框架支持Web项目
问题在于Web项目是没有明确的入口,IOC容器如何创建?
解决方案是在web.xml中配置一个监听器的类。这个监听器去监听Serlvet容器的创建,则自动执行方法来加载IOC容器。Serlvet容器是在Web项目启动时就加载。
添加步骤:
1.添加Spring的相关包,在以前的基础上再添加一个包:spring-web-4.3.10.RELEASE.jar
2.需要添加配置文件。
3.在web.xml文件中创建监听器对象。这个监听器对象就会自动来创建IOC容器。同时需要指定配置文件的路径。
2. Spring整合MyBites
问题
1:MyBites相关的API对象不需要自己创建,全部交给Spring创建才是正确的。
2:: MyBites的配置文件还还配置了数据源对象,这个对象也要交给Spring框架。
3:MyBites还通过SqlSession会话创建了许多的持久化接口的代理对象。这些对象也应该交给Spring框架来创建。
最大的改变是:Spring框架整合MyBites时,SqlSessionFactory类被弃用,改成了SqlSessionFactoryBean对象。而这个对象不在mybatis-3.4.5.jar包中,而是在mybatis-spring-1.3.0.jar包中,这个包是MyBites框架提供的专门用于整合Spring框架而实现的。
Mybatis的主配置文件里面的配置基本上都可以转移到Spring的配置文件中在配置SqlSessionFactoryBean这个对象时一起配置.
(以下部分操作根据自己项目选择相关方法)
3.连接相关连接池
4. MyBatis配置在Spring框架的配置文件中
5. 业务层类的调整
6. IOC容器的加载
因为是Web项目,IOC容器不能向Java项目一样在main方法创建。解决方案是去监听Serlvet容器加载时来创建 IOC容器,所以创建一个类,实现ServletContextListener接口,来监听Serlvet容器,创建IOC,并存储在Application作用域中。
7. 在Serlvet里面取IOC容器,再获取业务层的对象:
支持:
1. MyBatis
MyBatis 是持久层框架(ORM),它支持定制化 SQL、存储过程以及高级映射(动态MYSQL)。它可以把程序中的对象映射到数据库中形成数据行。也可以把数据库中的数据行映射成程序中的对象,减少了很多JDBC 代码和手动设置参数以及获取结果集,但需要我们手写SQL语句(半自动化)。可以使用XML或注解来配置和映射原生信息,将接口和Java类和对象映射成数据库中的记录。每个MyBatis应用程序主要都是使用SqlSessionFactor实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
2.IOC(Inversion of Control)控制反转;它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期)。用于管理对象的创建和依赖关系的维护。解耦,由容器维护其具体的对象。托管了类的产生过程,
IOC的好处有哪些?
1.它将最小化应用程序中的代码量。
2.它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例或JNDI查找机制。
3.它以最小的影响和最少的侵入机制促进松耦合,
4.它支持即时的实例化和延迟加载服务。
Spring的IOC支持哪些功能?
1.依赖注入(最重要)------从XML的配置上说,即ref标签。对应Spring RuntimeBeanReference对象
2.依赖检查、自动装配、支持集合、指定初始化方法和销毁方法
3.支持回调某些方法(但是需要实现Spring接口,略有侵入)
4.容器管理着Bean的生命周期,控制着Bean的依赖注入。
Spring IOC的实现机制
Spring中的IOC的实现原理就是工厂模式+反射机制。