[Spring+SpringMVC+Mybatis]框架学习笔记(一):SpringIOC概述
上一章:[Spring+SpringMVC+Mybatis]框架学习笔记:前言_目录
下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(二):Spring-IOC-DI
第1章 SpringIOC概述
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架。
1.1 控制反转IOC
IOC(inversion of controller)是一种概念,是把我们程序中的类与类之间的依赖关系交给容器去处理,一般有两种方式(面试):
- 依赖查找DL(dependency lookup):程序提供查找方式,交给容器去查找(相当于se中的回调函数);
- 依赖注入DI(dependency injection):程序不提供查找方式,提供合适的构造方法或者set方法,让容器进行注入来解决依赖关系。
Spring的控制反转就是通过依赖注入来实现。
1.2 依赖
依赖:简单的说,一个类实现某个功能需要依靠另外一个类的帮助。
1.3 回顾:基于接口编程的开发方式
当一个方法有多种实现的情况下,我们一般是基于接口的方式进行编程。
简单模拟用户登录的功能,这里省略后台数据库连接部分。
1)DAO层
接口IUserDao:
package com.steven.spring.sysmanage.dao; /** * 用于登录验证的DAO的接口 * @author Administrator * */ public interface IUserDao{ public boolean loginUser(String userName, String password); } //接口实现的两种方式:UserDaoImplJdbc.java和UserDaoImplOther.java package com.steven.spring.sysmanage.dao.impl; import com.steven.spring.sysmanage.dao.IUserDao; public class UserDaoImplJdbc implements IUserDao { public boolean loginUser(String userName, String password) { System.out.println("这是通过JDBC进行登录验证的DAO方法"); return true; } } package com.steven.spring.sysmanage.dao.impl; import com.steven.spring.sysmanage.dao.IUserDao; public class UserDaoImplOther implements IUserDao { public boolean loginUser(String userName, String password) { System.out.println("这是通过其它方式进行登录验证的DAO方法"); return true; } }
2) 服务层
package com.steven.spring.sysmanage.service; import com.steven.spring.sysmanage.dao.IUserDao; /** * 用于用户登录、增删改查的服务类 * @author Administrator * */ public class UserService { boolean flag = false; IUserDao userDao; public UserService(){ } //方式1:通过构造器的方式 public UserService(IUserDao userDao){ this.userDao = userDao; } //方式2:通过set方式,这种方式更灵活 public void setUserDao(IUserDao userDao) { this.userDao = userDao; } /** * 通过调用与数据库交互的UserDao里面的loginUser方法,判断是否验证成功 * @param userName * @param password * @return */ public boolean loginUser(String userName, String password){ flag = userDao.loginUser(userName, password); return flag; } }
3)测试类
package com.steven.spring.sysmgr.action; import org.junit.Test; import com.steven.spring.sysmgr.dao.impl.UserDaoImplJdbc; import com.steven.spring.sysmgr.service.UserService; public class LoginTest { @Test public void loginUsingJava(){ //方式1:使用构造方法 // UserService userService = new UserService(new UserDaoImplOther()); //方式2:使用set方法 UserService userService = new UserService(); userService.setUserDao(new UserDaoImplJdbc()); userService.loginUser("abc", "123"); } }
由于Java是一种编译性语言,维护时直接改编码,需要再次编译才能上线使用,这样就增大了维护的工作难度和工作量。 ----> 而更改配置文件就不需要重新编译!
1.4 依赖注入
依赖注入DI是指一个对象需要另外一个对象时,无需在代码中创建所需求对象,而是依赖于外部容器,由外部容器创建后传递给程序。
依赖注入是目前为止最好的解耦方式,因为依赖关系是依靠配置文件的方式组织在一起,而不是在程序中的硬编码。
1.5 Spring的IOC
Spring的IOC容器通过依赖注入来实现程序之间的依赖关系,达到解耦的作用。
老项目:3.2版本;新项目:4.2版本
1)Spring项目环境搭建依赖的jar包
java工程jar包放在项目根目录的libs文件夹下;web工程jar包放在WebContent/WEB-INF/libs文件夹下。
再加上junit的jar包:(注意junit4.10以后是拆分了两个包)
再加上日志包:
2)配置文件applicationContext.xml,加上bean约束
在spring-framework-4.2.1.RELEASE\docs\spring-framework-reference\html下有xsd-configuration.html文件中有初始配置。
IOC的实现原理:反射
无反射无框架,无代理无框架
在上面例子的基础上,增加spring配置xml文件,更改实现层。
1)spring配置文件applicationContext.xml
<?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"> <!-- 相当于Java代码中的 IUserDao userDaoImplJdbc = new UseDaoImplJdbc() --> <bean id="userDaoImplJdbc" class="com.steven.spring.sysmanage.dao.impl.UserDaoImplJdbc"></bean> <bean id="userDaoImplOther" class="com.steven.spring.sysmanage.dao.impl.UserDaoImplOther"></bean> <bean id="userService" class="com.steven.spring.sysmanage.service.UserService"> <!-- 方式1:通过构造方法的方式注入 --> <constructor-arg ref="userDaoImplOther"></constructor-arg> <!-- 方式2:通过set方法的方式注入,注意这里的的name的值需与set方法名后面的部分保持一致,且首字母小写--> <property name="userDao" ref="userDaoImplOther"/> </bean> </beans>
2)更改测试类
package com.steven.spring.sysmgr.action; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.steven.spring.sysmgr.dao.impl.UserDaoImplJdbc; import com.steven.spring.sysmgr.service.UserService; public class LoginTest { @Test public void loginUsinSpring(){ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService userService = (UserService)ac.getBean("userService"); userService.loginUser("abc", "123"); } }
上一章:[Spring+SpringMVC+Mybatis]框架学习笔记:前言_目录
下一章:[Spring+SpringMVC+Mybatis]框架学习笔记(二):Spring-IOC-DI
- Spring学习笔记----三大框架(Spring+SpringMVC+MyBatis)整合详细教程
- springMVC学习笔记---day02 springMVC+spring+mybatis整合开发框架搭建
- Spring+SpringMVC+Mybatis框架整合例子(SSM) 学习笔记
- Maven学习笔记(五)-Maven整合SSM(spring+springMVC+Mybatis)框架
- Spring+Spring MVC+Mybatis框架手动整合(笔记迁移)
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- 《Spring 3.x 企业应用开发实战》学习笔记 第三章 IoC容器概述 3.2 相关Java基础知识 类装载器 反射机制
- SSM框架——Spring+SpringMVC+Mybatis的搭建教程 一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。 Spring作为一个轻量级
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
- SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
- SSM(Spring+SpringMVC+MyBatis)框架学习心路历程【一】
- SSM(Spring+SpringMVC+MyBatis)框架学习心路历程【二】
- springMVC + mybatis + bootstrap 框架学习
- Maven学习笔记(十)-Maven整合SSHSJ(Spring+SpringMVC+Hibernate+Spring Data JPA+JdbcTemplate)框架
- Spring IOC 学习笔记(一) IoC和DI概述
- [springmvc+mybatis][关于这两个框架的学习,我想说]
- [springmvc+mybatis][关于这两个框架的学习,我想说]
- Spring MVC 学习总结(六)——Spring+Spring MVC+MyBatis框架集成
- Dubbo+spring+springmvc+mybatis+Maven+Jetty+Mysql+Ajax多框架融合学习网址收藏
- Spring学习笔记:Spring 框架概述