SSM框架学习

前言

  这篇文章主要是从基础开始一步步学习SSM框架。因为这是一份学习笔记,所以会按照课程将模块分成多章节来写。

文章目录


一、SSM框架是什么?

  学技术的时候,我们首先要了解我们学习的东西是什么,有什么用处。
  SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。–来源:百度百科

1.Spring框架是什么?

  Spring是分层的JavaSE/EE full-stack 轻量级开源框架,以IoC (Inverse of Control 控制反转)AOP(Aspect Oriented Programming 面向切面编程) 为内核,使用基本的JavaBean来完成以前只可能由EJB完成的工作,取代了EJB的臃肿、低效的开发模式。

2.SpringMVC是什么?

  SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。–来源:百度百科

3.MyBatis框架是什么?

  MyBatis(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的持久层框架。 也被称之为ORM(Object/Relation Mapping,即对象关系映射) 框架。
所谓的ORM就是一种为了解决面向对象关系型数据库中数据类型不匹配的技术,它通过描述Java对象数据库表之间的映射关系,自动将Java应用程序中的对象持久化到关系型数据库的表中。

OK,了解这SSM框架的三个组成部分,接下来我们来详细学习每一个部分。


二、Spring基础

1-1.Spring的技术支持

  在实际开发中,通常服务器端在采用三层体系架构,分别为表示层(Web)、业务逻辑层(Service)、持久层(Dao), Spring对每一层都提供了技术支持。
SSM框架学习

1-2.Spring框架的优点

1.非侵入式设计
2.方便解耦、简化开发
3.支持AOP
4.支持声明式事务处理
5.方便程序测试
6.方便集成各种优秀框架
7.降低Java EE API的使用难度


1-3.Spring的体系结构

Spring框架采用分层架构灰色主要模块
SSM框架学习

(1)Core Container (核心容器)

SSM框架学习

Beans: 提供了BeanFactory,Spring将管理对象称为Bean。

Core: 提供了Spring框架的基本组成部分,包括IoC和DI功能。

Context: 建立在Core和Beans模块的基础之上,它是访问定义和配置的任何对象的媒介。

SpEL: Spring3.0后新增的模块,是运行时查询和操作对象图的强大的表达式语言。

(2)Data Access/Integration (数据访问/集成)

SSM框架学习

JDBC: 提供了一个JDBC的抽象层,大幅度的减少了在开发过程中对数据库操作的编码。

ORM: 对流行的对象关系映射API,包括JPA、JDO和Hibernate提供了集成层支持。

OXM: 提供了一个支持对象/ XML映射的抽象层实现,如JAXB、Castor、XMLBeans、JiBX和XStream。

JMS: 指Java消息传递服务,包含使用和产生信息的特性,自4.1版本后支持与Spring-message模块的集成。

Transactions: 支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理。

(3)Web (网络)

SSM框架学习

WebSocket: Spring4.0以后新增的模块,它提供了WebSocket 和SockJS的实现,以及对STOMP的支持。

Servlet: 也称Spring-webmvc模块,包含Spring模型—视图—控制器(MVC)和REST Web Services实现的Web程序

Web: 提供了基本的Web开发集成特性,如:多文件上传、使用Servlet监听器来初始化IoC容器以及Web应用上下文。

Portlet: 提供了在portlet环境中使用MVC实现,类似Servlet模块的功能。

(4)其他模块

SSM框架学习

AOP: 提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。

Aspects: 提供了与AspectJ的集成功能,AspectJ是一个功能强大且成熟的面向切面编程(AOP)框架。

Instrumentation: 提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

Messaging: Spring4.0以后新增的模块,它提供了对消息传递体系结构和协议的支持。

Test: 支持对实现特殊接口以及所有POJO类的编程和声明式的事务管理。

1-4.Spring的目录结构

Spring框架包下载地址:
https://repo.spring.io/release/org/
springframework/spring/5.2.3.RELEASE/

(1)spring基础包

  libs目录中有四个Spring的基础包,分别对应Spring核心容器的四个模块。

spring-core-5.2.3.RELEASE.jar
  核心工具类,Spring其它组件都要用到这个包里的类。

spring-beans-5.2.3.RELEASE.jar
  所有应用都要用到的JAR包,包含访问配置文件、创建和管理Bean以及进行控制反转或者依赖注入操作相关的所有类。

spring-context-5.2.3.RELEASE.jar
  提供了在基础IoC功能上的扩展服务及企业级服务的支持。

spring-expression-5.2.3.RELEASE.jar
  表达式语言。

(2)lib的三种文件

  在libs目录里有三种文件结尾分别是:class文件、API文档、源码文件。
SSM框架学习

2-1.BeanFactory

BeanFactory 是容器最基础的类,Spring核心容器之一。

创建BeanFactory实例时,需提供Spring所管理容器的详细配置信息。
通常采用XML文件形式来管理,其加载配置信息
SSM框架学习

2-2.ApplicationContext

BeanFactory的子接口,也是Spring核心容器之一。

不仅包含了BeanFactory的所有功能,还添加了对国际化、资源访问、事件传播等方面的支持。

创建该接口实例,通常采用两种方法:

(1)通过ClassPathXmlApplicationContext创建

SSM框架学习
类路径classPath中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。

(2)通过FileSystemXmlApplicationContext创建

SSM框架学习
指定的文件系统路径 (绝对路径) 中寻找指定的XML配置文件,找到并装载完成ApplicationContext的实例化工作。

2-3.获取Bean方法

创建Spring容器后,就可以获取Spring容器中的Bean。

Spring获取Bean的实例通常采用以下两种方法:
(1)Object getBean(String name);
  根据容器中Bean的id或name来获取指定的Bean,获取之后需要进行强制类型转换。
(2) T getBean(Class requiredType);
  根据类的类型来获取Bean的实例。由于此方法为泛型方法,因此在获取Bean之后不需要进行强制类型转换。

3-1.Spring的Hello World!

入门程序----让程序输出 Hello World!
项目结构如下:
SSM框架学习
如果不会在IDEA里构建Web结构,可以参考一下这篇文章:
https://blog.csdn.net/weixin_48425200/article/details/120091735

在src目录下,创建一个com.itheima.ioc包,并在包中创建接口UserDao,代码如下:

package com.itheima.ioc;
public interface UserDao {public void say();}

在com.itheima.ioc包下,创建UserDao接口的实现类UserDaoImpl,代码如下:

package com.itheima.ioc;
public class UserDaoImpl implements UserDao {
public void say() {
System.out.println("userDao say hello World !");
  }
}

在src目录下,创建Spring的applicationContext.xml配置文件,并在配置文件中创建一个id为userDao的Bean。

<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
<bean id="userDao" class="com.itheima.ioc.UserDaoImpl"/>
</beans>

在com.itheima.ioc包下,创建测试类TestIoC,代码如下:

package com.itheima.ioc;
import org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
    public class TestIoC {
    public static void main(String[] args) { 
    //初始化Spring容器,并加载配置文件
       ApplicationContext applicationContext = new  ClassPathXmlApplicationContext("applicationContext.xml"); 
     //通过Spring容器获取userDao实例(即Java对象),
         UserDao userDao = (UserDao)       
         applicationContext.getBean("userDao");
     //调用实例中的say()方法
         userDao.say();
    }
}

预期结果为:
SSM框架学习

4-1.依赖注入

  DI(Dependency Injection,依赖注入)。它与控制反转(IoC) 的含义相同,只是它们是从两个角度描述的同一个概念。

(1)IoC (控制反转)

  在Spring框架中,对象的实例不再由调用者来创建,而是由Spring容器来创建,程序之间的关系由Spring容器控制,而不是调用者的程序代码。 这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。

(2)DI (依赖注入)

  从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入

4-2.依赖注入的实现方式

  使用setter方法实现依赖注入
项目结构如下:
SSM框架学习
在src目录下,创建一个com.itheima.ioc包,并在包中创建接口UserDao,代码如下:

package com.itheima.ioc;
public interface UserDao {
	public void say();
}

在com.itheima.ioc包下,创建UserDao接口的实现类UserDaoImpl,代码如下:

package com.itheima.ioc;
public class UserDaoImpl implements UserDao {
	public void say() {
		System.out.println("userDao say hello World !");
	}
}

在src目录下,创建一个com.itheima.ioc包,并在包中创建接口UserService,代码如下:

package com.itheima.ioc;
public interface UserService {
	public void say();
}

在com.itheima.ioc包中,创建UserService接口的实现类UserServiceImpl,在类中声明userDao属性及setter方法,代码如下:

package com.itheima.ioc;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void say() {
this.userDao.say();
System.out.println("userService say hello World !");
  }
}

在配置文件applicationContext.xml中,创建一个id为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将userDao的实例注入到userService中。

<?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
    https://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
	<bean id="userDao" class="com.itheima.ioc.UserDaoImpl" />
	<!--添加一个id为userService的实例 -->
	<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
	<!-- 将id为userDao的Bean实例注入到userService实例中 -->
	   <property name="userDao" ref="userDao" />
	</bean>
</beans>

在com.itheima.ioc包中,创建测试类TestDI,代码如下:

 package com.itheima.ioc;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 public class TestDI {
     public static void main(String[] args){ 
        ApplicationContext applicationContext = new    
               ClassPathXmlApplicationContext("applicationContext.xml"); 
        UserService userService=(UserService)    
               applicationContext.getBean("userService"); 
	  userService.say();
	}
 }

预期结果为:
SSM框架学习


总结(持续学习中)

第二章小结

  本讲主要介绍了Spring框架入门的一些基础知识,包括Spring的概念、优点、体系结构、核心容器、依赖注入等,同时通过一个入门程序讲解了Spring的基本使用

上一篇:黑马程序员-传智健康项目(第四章)


下一篇:轻松拥有属于自己的包