社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。
本博客可作为SSM的入门教程,我分为了三个部分,即Spring、Spring MVC、MyBatis,每个部分包含简单的应用实例。
最后完成一个简单的在线商城
传统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应用的各种解决方案,而不仅仅专注于某一层的方案,贯穿表现层、业务层和持久层。
以下图片摘自百度搜索引擎
作为一个全面的解决方案,Spring坚持一个原则:不重新发明轮子,例如,对象持久化和ORM,Spring只是对现有的JDBC、Mybatis、Hibernate等技术提供支持,使之更易用。而不是重复实现。
控制反转(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 实现输出
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的生命周期等。
现实中有一些内容并不是面向对象(OOP)可以解决的,比如数据库事务,它对于企业级的Java EE应用而言是十分重要的。
面向切面编程 (Aspect Oriented Programming),时软件编程思想发展到一定阶段的产物,是对面向对象编程(Object Oriented Programming,OOP)的有益补充。AOP一般适用于具有横切逻辑的场合,如访问控制、事务管理、性能检测等。
面向切面编程,简单的说就是在不改变原有程序的基础上为代码段增加新的功能,对其进行增强处理。它的设计思想来源于代理设计模式。
面向切面的一些基本概念:
在线商城的源码已上传至github 去下载https://github.com/HelloZzy23/onlineShop
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!