SSM——Spring
SSM框架——值得学习的web框架前言SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。本博客可作为SSM的入门教程,我分为了三个部分,即Spring、Spring MVC、MyBatis,每个部分包含简单的应用实例,最后使用SSM完成一个小...
前言
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)