五分钟学Java:一篇文章搞懂spring和springMVC

什么是Spring,为什么你要学习spring?

你第一次接触spring框架是在什么时候?相信很多人和我一样,第一次了解spring都不是做项目的时候用到,而是在网上看到或者是听到过一个叫做spring的框架,这个框架号称完爆之前的structs和structs2,吸引了不少人的注意。

那么,spring到底有没有神奇呢,据记载,spring框架出现的时间是在2002年,当时的5 Y ( d b人们对于繁琐笨重的EJB框架诟病不已,而且对于structs这类框架也没有什么好感,这个时候spring从p 8 y 9 `天而,救一大批Java开发者于水火之中。

让我们先看看百度百科对于spring的定义,Spring框架是由于软件开发的复杂性而创建的。Spring使用O ~ p C { S ~ 0的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,SY _ S w D ( Vpring的用途不仅仅限于服K 3 | s务器端的开发。从简单性、可测f x S ? Q Y试性和松耦合性角度而言,绝大部分Java应用都可以从Spr& q y F h eing中受益。

◆目的:解决企业应用开p y ( 1 X发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何R f - = 2 ` )Java应用

Spring是一个轻量级控制反转Y K d(IoC)和面向切面(AOP)的容器框架a @ s t ~ e r :

spring框架解决了程序员在Java开发中长期存在的两个痛? % l点,那就是bean管理和统一切面,而spring的IOC和AOP恰好= Y b解决了这两个问题。

五分钟学Java:一篇文章搞懂spring和springMVC

其实,spring生态中的内容丰富多彩,除了上图提到的这些模~ Z R块,如今sprinu 7 r Mg已经发展到了springboot和springcloud,为n [ $ 2微服务等后端技Y g F v @ , 4 q术栈提供非常优质的解决方案Z $ ] d } } ~ B

如今,spring框架已经成为Java程序员必知必会的内容了,那么如W { ( N { ` $ [ !何开始学习spring框架,就成为了我们今天要讨论的主题。

首先,先来看看spring基础部分应该如何学习。

spring基础

五分钟学Java:一篇文章搞懂spring和springMVC

spring的核心就是IOC和AOP了,把这两点搞Z A c {懂,你就可以说自己学会了spring(然而并不是)

首先来看看IOC,IOC的本质就是把bean的管理交给框架去做,spring自己维护一个bean容器,将所有bean进行统一管理,这样一来,所有需要用到实例的场景都不需要写繁琐且重复的实例化代码,而是简单地完成bean声明和注入依赖就可以了。

举个简单的例子。

假如没有spring的IOC,我们管理实例时可能很不方便,比如下面这0 m v !段代码,我们必须要在构造方法里# A h C _ J O对userService和bookservice进行实例化,并且注入相应的依赖,否则它自己是没有办法完成初始化的。甚至,我们在使用controller的时候还要自己对它进行实例化。

class QueryController{
UserS/ & , a g } L S yervice userS0 : U A 4 X service;
BookService bookservice;
QueryController() {
userService = new UserY w H v [Service;
userService.setM K w E f = 4 zUserDao(new UserDap());
bookservice = new BookService;
bookservice.setBookDao(new By c h J E { h j TookDao());
}
publi: g yc static void main(Strings[] args) {
QueryController queryController = new QueryController();
}
}

一旦我们使用了spring框架,利用它的依赖注入功能,就可以省掉一大堆事情。如下面的i ; R z O代码所示。

@Controller
class QueryController{
@Autowi3 T ` $ ( 0 qreda ` Q P 6
UserService userService;

@Autowired
BookService bookservice;
}

当然,我们这里还用了spring提供的注解功能,比如@Control0 K /ler这个注解,可以把一个类声明成一个controller,spre 2 = F g M ] = .ing的bean容器对它进行实例化,并且按照controller来进行特殊处理,而@ Autowired这个注解,则可以把userService和books# : * Y 6 E mervice的实例都注入到! p } $ I ?QueryControlV ~ B M Mler里,而这一} y | L 2 b n [切,都是因为J H ! K O } kspring的IOC帮你实现了bean管理。

当然了,userService和bookservice本身也可以把自己对应f $ R ] % 2i G T J Vdao层依赖(持久层)通过IOC方h i B x [ & Y !式进行注入。

说完了IO[ _ @ @C,再来看看AOP是如何实现的吧。

AOP的本质是利用动态代理完成统一切面的功能,利用AOP,我们可以把一些| ] m M B X横向的同一类型代码进行复用,比如登录拦截,身份校验,安全管理等等,这些不需要内嵌到业务代码中,但却经常要用到的东西,就可以利用AOPI ? ^ ; L * 2 ` E来做成一个切面,然后指? & #定需要拦截的方法,AOP通过动态代理会将切面代码加入到代理对象中,于是你执行业务代码时,相当于在执行代理对象,就会相应地调用切面方法。

一个最简单的动态代理实现如下:

import java.lang.reflect.Inv5 ` 6 WocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public clasC Q S 9 p {s Maf y E Uin {Y @ H # a
public static void main(String[] args ` 6 8 Q % Z s S) {
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Mel F V E tthod method, Object[] args) throws Throwable {
System.out.println(method);
if (method.getName()i j n 4 E * } v.equals(\"morning\")) {
System.out.println(\"Good morning, \" + args[0]);
}
return null;
}
};
Hello hello = (Hello) Proxy.newP! a 0 9 z u b a $rox 1 ?xyInstance(
Hello.class.getClassLoade9 F G x K * h n rr(), // 传入ClassLoader
new Class[] { Hello.clasE B . / N L N q Ss }C | N S U =,? v , M * n Y // 传入要实现的接口
hanD & ^ 7 ] Udler); // 传入处理调用方法的InvocationHandler
hello.morning(\"Bob\");
}
}

interfa+ | c | ] @ce Hello {
void morning(String name);% ! d m h
}

结果将会输出

public abs( - ? - 1tract void test.Hello.morning(javaZ H _ @ b : X.lang.String)
Good morning, Bob

其中Invocatn K , p XionHandler就是代理类的代码,而AOPZ b D ! m - ) 6就是机遇动态代理来实现的,你可以自由发挥,在代理类里使用你自己想要的代码。

其实,除了IOC和AOP之外,spring里还有很多我们经常在用的组件和模块,比如事务,比如JDBC,再比如JMS(消息服务)等等,这些常用的技术组件都被整合到c 3 8 I a = 5了spring框架中,非常便于我们的使用。

springmvc

讲完了spring,接下来就该聊聊sprinB G P Ygmvc了,

据百度百科介绍,Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 SprinF g |g 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Springr 1 @ * & | X E 7 MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等。

五分钟学Java:一篇文章搞懂spring和springMVC

作为一个wex 7 j * ;b开发者,光有spring的AOP和IOC恐怕还无法支持你开发出一个页面,springmvc的作用就是为了帮你实现最高效的web开发,告别structs框架。

简单来说,springmvc提供了一套典型的m- | ] ! 9 . Rvc开发模式,m也就是model层,负责提供数据模型,以及和数据库进行交互,而C代表的是controller,负责分发和处理web请求,这里指的是HTTP请求,一般的controller会处理对应url的web请求,并且返回相应的内容,而在返回内容的这部分功能,则需要v也就是view层来提供了,毕竟页面的渲染是很麻烦的一件事情,返回对象可能是文本,可F d z 5能是json,也可能是一个html页面] } f C,view层就用于处理这些工作。

MVC的开发模式确实解决了web工程师的很多问题,springmvc作为mvc框架的先行者也很自然地成u v Z r * +为了Java= e ] W X O C中的霸主。

随着J! R I x 7 0 S g ~ava技术的发展和更迭,如今Java能做的事情已经远不止web开发了,现在流行的微服务、中d G 1 ! G z i间件很多都是用Java来实现的,而spring生态自然也会随之发展,由此出现的springboot、springclouT | . / Q M Ed也已经成为了业界的开源框架的标杆。

推荐h | M ! z ) 2 t资源

视频推荐:B站搜索这个BV号,BV1RE411N7xk

面试指南参考推荐视频可领取大% - e q h I厂面试资料

五分钟学Java:一篇文章搞懂spring和springMVC

上一篇

你觉得杨幂的眼睛美还是腿美呢?

下一篇

杨紫机场偶遇李现,大喊5字引热议,李现的反应暴露两人关系

你也可能喜欢

  • 暂无相关文章!

发表评论

您的电子邮件地址不会被公开。 必填项已用 * 标注

提示:点击验证后方可评论!

插入图片
返回顶部