1、SSH各个的职责
Struts2:是web框架(管理jsp、action、actionform等)。
Hibernate:是ORM框架,处于持久层。
Spring:是一个容器框架,用于配置bean,并维护bean直接的关系。
Bean(组件):java中任何一种对象,如 javabean(domin、entity、POJO、POVO)、数据源、dao、service、action等
比如:User、数据表user、UserDao、UserService、UserAction
2、Spring的原理
2.1、工作原理
1、通过Spring容器IOC(inverse of control)动态注入,把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护。即程序之间不用再new对象了,且方法之间也不用相互调用了,都是同过spring的容器(applicationContext.xml)来维护他们之间的关系(创建对象/调用方法等等)。
2、通过Spring容器AOP(Aspect-Oriented Programming),可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块/方法)从而达到对一个模块扩充的功能。
2.2、工作流程
简单的理解:Struts2调用对应的xxxAction中的方法时,Spring容器根据相关的配置去调用对应的Service -->DAO -->entity -->数据库,最后把结果原路返回给调用者(Struts2)。
2.3、相关概念
IoC是什么?
答:IOC(inverse of control) 控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(applicationContext.xml),而程序本身不再维护。
DI是什么?
答:DI(dependency injection)依赖注入: 实际上di和ioc是同一个概念,spring设计者认为di更准确表示spring核心技术。——> IOC 等于 DI
AOP是什么? 答:AOP(Aspect-Oriented Programming)面向切面编程,就是在调用某个类对象的具体方法前/后,先去调用你指定的模块/方法,最后,程序再按原来的顺序执行下去。
2.4、Spring的几大模块
1) Spring Corespring的核心功能: IOC容器, 解决对象创建及依赖关系
2) Spring WebSpring对web模块的支持。
--> 可以与struts整合,让struts的action创建交给spring
--> 或者说spring mvc模式
3) Spring DAO Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】
4) Spring ORM spring对orm的支持:
--> 既可以与hibernate整合,【session】
--> 也可以使用spring的对hibernate操作的封装
5)Spring AOP 切面编程
6)SpringEEspring 对javaEE其他模块的支持
3、基础配置(实例解析)
Dao 层
1 packagecom.shore.dao;2
3 /**
4 *@authorDSHORE/2019-10-155 *6 */
7 public classUserDao {8 privateString name;9
10 public voidsave() {11 System.out.println(name + "用户保存成功");12 }13
14 publicString getName() {15 returnname;16 }17 public voidsetName(String name) {18 this.name =name;19 }20 }
Service 层
1 packagecom.shore.service;2
3 importcom.shore.dao.UserDao;4
5 /**
6 *@authorDSHORE/2019-10-157 *8 */
9 public classUserService {10
11 privateUserDao userDao;12
13 public voidsave(){14 userDao.save();15 }16
17 publicUserDao getUserDao() {18 returnuserDao;19 }20 public voidsetUserDao(UserDao userDao) {21 this.userDao =userDao;22 }23 }
Action 层
1 packagecom.shore.action;2
3 importcom.shore.service.UserService;4
5 /**
6 *@authorDSHORE/2019-10-157 *8 */
9 public classUserAction {10
11 privateUserService userService;12
13 publicString save() {14 userService.save();15 return "success";16 }17
18 publicUserService getUserService() {19 returnuserService;20 }21 public voidsetUserService(UserService userService) {22 this.userService =userService;23 }24 }
applicationContext.xml 配置文件
1
2
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:aop="http://www.springframework.org/schema/aop"
5 xmlns:tx="http://www.springframework.org/schema/tx"
6 xsi:schemaLocation="7 http://www.springframework.org/schema/beans8 http://www.springframework.org/schema/beans/spring-beans.xsd9 http://www.springframework.org/schema/tx10 http://www.springframework.org/schema/tx/spring-tx.xsd11 http://www.springframework.org/schema/aop12 http://www.springframework.org/schema/aop/spring-aop.xsd">
13
14
21
22
23
24
25
26
27
28
29
30
31
32
33
测试类:
1 packagecom.shore.test;2
3 importorg.junit.Test;4 importorg.springframework.context.support.ClassPathXmlApplicationContext;5
6 importcom.shore.action.UserAction;7
8 /**
9 *@authorDSHORE/2019-10-1510 *11 */
12 public classMyTest {13 @Test14 public voidtest() {15 //创建IoC容器
16 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");17 UserAction userAction = (UserAction) context.getBean("userAction");18 System.out.println("UserAction返回给struts.xml的值:" +userAction.save());19 }20 }
测试结果: