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 Core  spring的核心功能: IOC容器, 解决对象创建及依赖关系
  2) Spring Web  Spring对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)SpringEE   spring 对javaEE其他模块的支持

3、基础配置(实例解析)

Dao 层

 package com.shore.dao;

 /**
* @author DSHORE/2019-10-15
*
*/
public class UserDao {
private String name; public void save() {
System.out.println(name + "用户保存成功");
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

Service 层

 package com.shore.service;

 import com.shore.dao.UserDao;

 /**
* @author DSHORE/2019-10-15
*
*/
public class UserService { private UserDao userDao; public void save(){
userDao.save();
} public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}

Action 层

 package com.shore.action;

 import com.shore.service.UserService;

 /**
* @author DSHORE/2019-10-15
*
*/
public class UserAction { private UserService userService; public String save() {
userService.save();
return "success";
} public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}

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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"> <!--
id——指定bean对象的id
class——指定bean的类,不能用接口
scope——单例/多例,默认是单例“singleton”(此时在初始化容器之前就创建对象),多例:用到的时候才创建
lazy-init——懒加载,只针对单例有效,默认是false,如果是true——用到的时候才创建
init-method——指定对象的初始化方法,时间由创建对象的时间来决定
-->
<!-- UserDao userDao = new UserDao() -->
<bean id="userDao" class="com.shore.dao.UserDao" scope="singleton"><!-- 默认是单例,可不写 -->
<property name="name" value="DSHORE"></property>
</bean> <bean id="userService" class="com.shore.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean> <bean id="userAction" class="com.shore.action.UserAction" scope="prototype"><!-- prototype:多例 -->
<property name="userService" ref="userService"></property>
</bean>
</beans>

测试类:

 package com.shore.test;

 import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.shore.action.UserAction; /**
* @author DSHORE/2019-10-15
*
*/
public class MyTest {
@Test
public void test() {
// 创建IoC容器
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserAction userAction = (UserAction) context.getBean("userAction");
System.out.println("UserAction返回给struts.xml的值:" + userAction.save());
}
}

测试结果:

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/11680766.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

Java进阶知识15 Spring的基础配置详解的更多相关文章

  1. Java进阶知识04 Struts2的基础配置详解

    1.Struts2的原理/流程步骤 简单的理解:    1.客户端发送一个request请求,Tomcat服务器接收到的请求经过web.xml配置文件去处理,进入struts2的核心过滤器,从而进入s ...

  2. Java进阶知识03 Hibernate的基础配置详解

    1.Hibernate的原理/流程步骤 1.通过Configuration().configure(); 读取并解析hibernate.cfg.xml配置文件,并创建一个configuration对象 ...

  3. 经典Spring入门基础教程详解

    经典Spring入门基础教程详解 https://pan.baidu.com/s/1c016cI#list/path=%2Fsharelink2319398594-201713320584085%2F ...

  4. spring mvc+myBatis配置详解

    一.spring mvc Spring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M- ...

  5. spring sessionFactory 属性配置详解,applicationContext中各种属性详解

    1.Bean的id为sessionFactory,对应的类为AnnotationSessionFactory,即采用注解的形式实现hibernate. 2.hibernateProperties,配置 ...

  6. Java核心知识体系3:异常机制详解

    1 什么是异常 异常是指程序在运行过程中发生的,由于外部问题导致的运行异常事件,如:文件找不到.网络连接失败.空指针.非法参数等. 异常是一个事件,它发生在程序运行期间,且中断程序的运行. Java ...

  7. Java进阶知识25 Spring与Hibernate整合到一起

    1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建.    2) hibernate事务交给spring的声明 ...

  8. Java进阶知识24 Spring的事务管理(事务回滚)

    1.事务控制概述   1.1.编程式事务控制         自己手动控制事务,就叫做编程式事务控制.         Jdbc代码: connection.setAutoCommit(false); ...

  9. Java进阶知识23 Spring对JDBC的支持

    1.最主要的代码 Spring 配置文件(beans.xml) <!-- 连接池 --> <bean id="dataSource" class="co ...

随机推荐

  1. codeforces 1249D1/D2 Too Many Segments (贪心)

    (点击此处查看原题) 题意说明 有n个区间,第i个区间覆盖范围[li,ri]内所有点,问删除最少哪些区间,使得所有点被区间覆盖的次数少于等于k次 解题思路 看到这个题的时候,觉得和开关(反转)问题很像 ...

  2. jupyter lab 安装

    在windows下安装jupyter 特别简单 首先你需要有Anaconda or python的环境变量,这里我就不说怎么安装环境变量了,网上一大堆教程 启动黑窗口,下载jupyter pip in ...

  3. 前端vue组件传参

    ## 路由传参 """ 转跳: <router-link :to="'/course/'+course.id">{{course.name ...

  4. 17.tmux相关

    Linux终端复用神器-Tmux使用梳理 Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tm ...

  5. 【第一季】CH06_FPGA设计Verilog基础(三)

    [第一季]CH06_FPGA设计Verilog基础(三) 一个完整的设计,除了好的功能描述代码,对于程序的仿真验证是必不可少的.学会如何去验证自己所写的程序,即如何调试自己的程序是一件非常重要的事情. ...

  6. 【转】iis7下站点日志默认位置

    本文转自:http://www.cnblogs.com/mincyw/p/3425468.html 在iis6时,通过iis管理器的日志配置可以找到站点日志存储的位置. 但是在iis7下,iis管理器 ...

  7. 为什么我们需要Pod?(容器设计模式sidecar)

    Pod,是 Kubernetes 项目中最小的 API 对象 容器的本质是进程,就是未来云计算系统中的进程:容器镜像就是这个系统里的".exe"安装包 Kubernetes 就是操 ...

  8. ggpubr进行“paper”组图合并,也许比PS,AI更简单

    本文转载自微信公众号 “生信补给站”,https://mp.weixin.qq.com/s/41iKTulTwGcY-dHtqqSnLA 多个图形进行组图展示,可以既展示一个“事情”的多个角度,也可以 ...

  9. .js文件中文乱码解决办法

    描述:.js文件里的中文内容在网页中显示乱码 解决办法:把JS文件的编码改为utf-8 VS2013解决步骤:文件——高级保存选项——Unicode (UTF-8带签名)  代码页 65001

  10. 微信小程序登录获取手机号

    一,发送请求携带 code 到后台换取 openid var that = this; wx.login({ success(res) { console.log(res); var code = r ...