前言

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
本博客可作为SSM的入门教程,我分为了三个部分,即Spring、Spring MVC、MyBatis,每个部分包含简单的应用实例。
最后完成一个简单的在线商城

一.Spring框架

1.认识Spring

1.1传统JavaEE开发

传统JavaEE项目在解决企业级应用问题时的“重量级”架构体系,使它的开发效率、开发难度和实际性能都令人失望。Spring以一个“救世主”形象出现在广大Java程序员面前。2002年,Rod Johnson在他的《Expert One-on-One Java EE Design and Development》一书中提出了Interface 21,也就是Spring框架的雏形。他提出技术应该以应用为主的主张,引发了人们对“正统”JavaEE的反思。2003年2月,Spring框架正式成为一个开源项目,并发布于SourceForge中。
Spring致力于JavaEE应用的各种解决方案,而不仅仅专注于某一层的方案,贯穿表现层、业务层和持久层。

1.2 Spring整体架构

以下图片摘自百度搜索引擎
在这里插入图片描述
作为一个全面的解决方案,Spring坚持一个原则:不重新发明轮子,例如,对象持久化和ORM,Spring只是对现有的JDBC、Mybatis、Hibernate等技术提供支持,使之更易用。而不是重复实现。

  • Spring Core是框架的基础部分,提供了IoC特性
  • Spring Context为企业级开发提供了便利的集成工具
  • Spring JDBC提供了JDBC的抽象层,简化了JDBC编码,同时使代码更健壮。
  • Spring ORM对市面上流行的ORM框架提供了支持
  • Spring Web为Spring在Web应用程序中的使用提供了支持
1.2.1 IoC/DI

控制反转(Inversion of Control,IoC)也称为依赖注入(Dependency Injection,DI),用来降低程序代码之间的耦合度。
例如,在A类的方法中实例化了B类的对象,并调用其方法实现某种功能,则称A类依赖于B类。常见的业务层调用数据访问层以实现持久化操作

//用户DAO接口,定义了所需的持久化方法DAO(Data Access Object)
public interface UserDao {
//保存信息方法
     public void save(User user);
}

//用户DAO实现类,实现对User类的持久化操作
public class UserDaoImpl implements UserDao{
	public void save(User user){
	System.out.println("已保存");
	}
}

//用户业务类,实现对User功能的业务管理
public class UserServiceImpl implements UserService{
	private UserDao dao=new UserDaoImpl();
	public void addNewUser(User user){
	dao.save(user);
	}
}

上面代码,UserServiceImpl对UserDaoImpl存在依赖关系,这样的代码存在严重的问题,即UserServiceImpl和UserDaoImpl高度耦合,如果因为需求变化需要替换UserDao的实现类,将导致UserServiceImpl中的代码随之发生修改。
而Spring能够分担这些额外的工作,并提供了完整的IoC实现,让我们得以专注于业务类和DAO类的设计与实现。
使用Spring 实现输出

  • 开发环境的搭建,使用地表最强IDE—— JetBrains的IntelliJ IDEA

create New project->选择Spring->输入项目名(idea会自动下载Spring所需jar包,若下载不成功,请翻墙)

右击->src->new->package->输入包名(我使用com)->右击包->new->Java Class->建立“HelloSpring”Java类

package com;

public class HelloSpring {
    private String str=null;

    public void print(){
        System.out.println("hello,"+this.getStr());
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }
}

继续建立Spring的配置文件:
右击项目名->new->Directory->输入“resources”->右击“resources”->Mark Directory As->Resources Root,右击Resources文件夹,选择new->File->创建 applicationContext.xml
"applicationContext.xml"文件内容如下,配置Spring

<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">

<!--通过bean元素声明需要Spring创建的实例。该实例的类型通过class属性指定,
并通过id属性为该实例指定一个名称,便于访问-->
    <bean id="HelloSpring" class="com.HelloSpring">
        <!--pro[erty元素用来为实例的属性赋值-->
        <property name="str">
            <value>Spring</value>
        </property>
    </bean>


</beans>

在com包下建立Test 主类来测试:

package com;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[]args){
        String config="applicationContext.xml";
        ApplicationContext ac=new ClassPathXmlApplicationContext(config);
        HelloSpring helloSpring=(HelloSpring)ac.getBean("HelloSpring");

        //运行print方法
        helloSpring.print();
    }
}

在这里插入图片描述
运行Test类主方法,查看控制台,看到成功输出了信息:
在这里插入图片描述
这种做法解释了spring的“注入”,应用程序通过BeanFactory接口与Spring IoC容器交互,
ApplicationContext是BeanFactory的子接口,负责读取Spring配置文件,管理对象的加载、 生成,维护Bean对象之间的依赖关系,负责Bean的生命周期等。

1.2.2 AOP

现实中有一些内容并不是面向对象(OOP)可以解决的,比如数据库事务,它对于企业级的Java EE应用而言是十分重要的。

面向切面编程 (Aspect Oriented Programming),时软件编程思想发展到一定阶段的产物,是对面向对象编程(Object Oriented Programming,OOP)的有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制、事务管理、性能检测等。

面向切面编程,简单的说就是在不改变原有程序的基础上为代码段增加新的功能,对其进行增强处理。它的设计思想来源于代理设计模式。
面向切面的一些基本概念:

  • 切面(Aspect):一个模块化的横切逻辑(或称横切关注点),可能会横切多个对象
  • 连接点(Join Point):程序执行中的某个具体的执行点
  • 增强处理(Advice):切面在某个特定连接点上执行的代码逻辑
  • 切入点(PointCut):对连接点的特征进行描述
  • 目标对象(Target Object):被一个或多喝切面增强的对象
  • AOP代理(AOP proxy):由AOP框架所创建的对象,实现执行增强处理方法等功能
  • 织入(weaving):将增强处理连接到应用程序中的类型或对象上的过程

在线商城的源码已上传至github 去下载https://github.com/HelloZzy23/onlineShop

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐