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

副本_未命名.jpg

原创声明

本文做者:黄小斜html

转载请务必在文章开头注明出处和做者。java

本文思惟导图

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

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

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

让咱们先看看百度百科对于spring的定义,Spring框架是因为软件开发的复杂性而建立的。Spring使用的是基本的JavaBean来完成之前只可能由EJB完成的事情。然而,Spring的用途不只仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用均可以从Spring中受益。spring

◆目的:解决企业应用开发的复杂性数据库

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

◆范围:任何Java应用后端

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。安全

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

image

其实,spring生态中的内容丰富多彩,除了上图提到的这些模块,现在spring已经发展到了springboot和springcloud,为微服务等后端技术栈提供很是优质的解决方案。

现在,spring框架已经成为Java程序员必知必会的内容了,那么如何开始学习spring框架,就成为了咱们今天要讨论的主题。

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

spring基础

image

spring的核心就是IOC和AOP了,把这两点搞懂,你就能够说本身学会了spring(然而并非)

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

举个简单的例子。

假如没有spring的IOC,咱们管理实例时可能很不方便,好比下面这段代码,咱们必需要在构造方法里对userService和bookservice进行实例化,而且注入相应的依赖,不然它本身是没有办法完成初始化的。甚至,咱们在使用controller的时候还要本身对它进行实例化。

class QueryController{
    UserService userService;
    BookService bookservice;
    QueryController() {
        userService = new UserService;
        userService.setUserDao(new UserDap());
        bookservice = new BookService;
        bookservice.setBookDao(new BookDao());
    }
    public static void main(Strings[] args) {
        QueryController queryController = new QueryController();
    }
}

一旦咱们使用了spring框架,利用它的依赖注入功能,就能够省掉一大堆事情。以下面的代码所示。

@Controller
class QueryController{
    @Autowired
    UserService userService;
    
    @Autowired
    BookService bookservice;
}

固然,咱们这里还用了spring提供的注解功能,好比@Controller这个注解,能够把一个类声明成一个controller,spring的bean容器对它进行实例化,而且按照controller来进行特殊处理,而@
Autowired这个注解,则能够把userService和bookservice的实例都注入到QueryController里,而这一切,都是由于spring的IOC帮你实现了bean管理。

固然了,userService和bookservice自己也能够把本身对应的dao层依赖(持久层)经过IOC方式进行注入。

说完了IOC,再来看看AOP是如何实现的吧。

AOP的本质是利用动态代理完成统一切面的功能,利用AOP,咱们能够把一些横向的同一类型代码进行复用,好比登陆拦截,身份校验,安全管理等等,这些不须要内嵌到业务代码中,但却常常要用到的东西,就能够利用AOP来作成一个切面,而后指定须要拦截的方法,AOP经过动态代理会将切面代码加入到代理对象中,因而你执行业务代码时,至关于在执行代理对象,就会相应地调用切面方法。

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

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class Main {
    public static void main(String[] args) {
        InvocationHandler handler = new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println(method);
                if (method.getName().equals("morning")) {
                    System.out.println("Good morning, " + args[0]);
                }
                return null;
            }
        };
        Hello hello = (Hello) Proxy.newProxyInstance(
            Hello.class.getClassLoader(), // 传入ClassLoader
            new Class[] { Hello.class }, // 传入要实现的接口
            handler); // 传入处理调用方法的InvocationHandler
        hello.morning("Bob");
    }
}

interface Hello {
    void morning(String name);
}

结果将会输出

public abstract void test.Hello.morning(java.lang.String)
Good morning, Bob

其中InvocationHandler就是代理类的代码,而AOP就是机遇动态代理来实现的,你能够自由发挥,在代理类里使用你本身想要的代码。

其实,除了IOC和AOP以外,spring里还有不少咱们常常在用的组件和模块,好比事务,好比JDBC,再好比JMS(消息服务)等等,这些经常使用的技术组件都被整合到了spring框架中,很是便于咱们的使用。

springmvc

讲完了spring,接下来就该聊聊springmvc了,

据百度百科介绍,Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,能够选择使用Spring的Spring MVC框架或集成其余MVC开发框架,如Struts1(如今通常不用),Struts 2(通常老项目使用)等。

image

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

简单来讲,springmvc提供了一套典型的mvc开发模式,m也就是model层,负责提供数据模型,以及和数据库进行交互,而C表明的是controller,负责分发和处理web请求,这里指的是HTTP请求,通常的controller会处理对应url的web请求,而且返回相应的内容,而在返回内容的这部分功能,则须要v也就是view层来提供了,毕竟页面的渲染是很麻烦的一件事情,返回对象多是文本,多是json,也多是一个html页面,view层就用于处理这些工做。

MVC的开发模式确实解决了web工程师的不少问题,springmvc做为mvc框架的先行者也很天然地成为了Java中的霸主。

随着Java技术的发展和更迭,现在Java能作的事情已经远不止web开发了,如今流行的微服务、中间件不少都是用Java来实现的,而spring生态天然也会随之发展,由此出现的springboot、springcloud也已经成为了业界的开源框架的标杆。

时间有限,剩余的内容咱们将会在之后继续推出,敬请期待。

推荐资源

spring的书籍、视频教程其实都不少,这里挑选一些我认为还不错的推荐给你们。 

英文好的同窗不妨直接去看官方文档。

书籍

Spring Boot实战 ,丁雪丰 (译者)

Spring源码深度解析

视频

这里我整理了一些还算不错的视频资源分享给你们,具体请在公众号【程序员黄小斜】内回复“spring”便可查看

博客

Java技术仓库《Java程序员复习指南》 

整合全网优质Java学习内容,帮助你从基础到进阶系统化复习Java 

相关文章
相关标签/搜索