什么是spring和springMVC-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“什么是spring和springMVC”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“什么是spring和springMVC”吧!

成都創(chuàng)新互聯(lián)公司專注于張掖企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開發(fā)。張掖網(wǎng)站建設(shè)公司,為張掖等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

什么是Spring,為什么你要學(xué)習(xí)spring?

你第一次接觸spring框架是在什么時(shí)候?相信很多人和我一樣,第一次了解spring都不是做項(xiàng)目的時(shí)候用到,而是在網(wǎng)上看到或者是聽到過一個(gè)叫做spring的框架,這個(gè)框架號(hào)稱完爆之前的structs和structs2,吸引了不少人的注意。

那么,spring到底有沒有神奇呢,據(jù)記載,spring框架出現(xiàn)的時(shí)間是在2002年,當(dāng)時(shí)的人們對(duì)于繁瑣笨重的EJB框架詬病不已,而且對(duì)于structs這類框架也沒有什么好感,這個(gè)時(shí)候spring從天而,救一大批Java開發(fā)者于水火之中。

讓我們先看看百度百科對(duì)于spring的定義,Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性角度而言,絕大部分Java應(yīng)用都可以從Spring中受益。

◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能

◆范圍:任何Java應(yīng)用

Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

spring框架解決了程序員在Java開發(fā)中長(zhǎng)期存在的兩個(gè)痛點(diǎn),那就是bean管理和統(tǒng)一切面,而spring的IOC和AOP恰好解決了這兩個(gè)問題。

其實(shí),spring生態(tài)中的內(nèi)容豐富多彩,除了上圖提到的這些模塊,如今spring已經(jīng)發(fā)展到了springboot和springcloud,為微服務(wù)等后端技術(shù)棧提供非常優(yōu)質(zhì)的解決方案。

如今,spring框架已經(jīng)成為Java程序員必知必會(huì)的內(nèi)容了,那么如何開始學(xué)習(xí)spring框架,就成為了我們今天要討論的主題。

首先,先來看看spring基礎(chǔ)部分應(yīng)該如何學(xué)習(xí)。

spring基礎(chǔ)

什么是spring和springMVC

spring的核心就是IOC和AOP了,把這兩點(diǎn)搞懂,你就可以說自己學(xué)會(huì)了spring(然而并不是)

首先來看看IOC,IOC的本質(zhì)就是把bean的管理交給框架去做,spring自己維護(hù)一個(gè)bean容器,將所有bean進(jìn)行統(tǒng)一管理,這樣一來,所有需要用到實(shí)例的場(chǎng)景都不需要寫繁瑣且重復(fù)的實(shí)例化代碼,而是簡(jiǎn)單地完成bean聲明和注入依賴就可以了。

舉個(gè)簡(jiǎn)單的例子。

假如沒有spring的IOC,我們管理實(shí)例時(shí)可能很不方便,比如下面這段代碼,我們必須要在構(gòu)造方法里對(duì)userService和bookservice進(jìn)行實(shí)例化,并且注入相應(yīng)的依賴,否則它自己是沒有辦法完成初始化的。甚至,我們?cè)谑褂胏ontroller的時(shí)候還要自己對(duì)它進(jìn)行實(shí)例化。

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;
}

當(dāng)然,我們這里還用了spring提供的注解功能,比如 @Controller這個(gè)注解,可以把一個(gè)類聲明成一個(gè)controller,spring的bean容器對(duì)它進(jìn)行實(shí)例化,并且按照controller來進(jìn)行特殊處理,而@
Autowired這個(gè)注解,則可以把userService和bookservice的實(shí)例都注入到QueryController里,而這一切,都是因?yàn)閟pring的IOC幫你實(shí)現(xiàn)了bean管理。

當(dāng)然了,userService和bookservice本身也可以把自己對(duì)應(yīng)的dao層依賴(持久層)通過IOC方式進(jìn)行注入。

說完了IOC,再來看看AOP是如何實(shí)現(xiàn)的吧。

AOP的本質(zhì)是利用動(dòng)態(tài)代理完成統(tǒng)一切面的功能,利用AOP,我們可以把一些橫向的同一類型代碼進(jìn)行復(fù)用,比如登錄攔截,身份校驗(yàn),安全管理等等,這些不需要內(nèi)嵌到業(yè)務(wù)代碼中,但卻經(jīng)常要用到的東西,就可以利用AOP來做成一個(gè)切面,然后指定需要攔截的方法,AOP通過動(dòng)態(tài)代理會(huì)將切面代碼加入到代理對(duì)象中,于是你執(zhí)行業(yè)務(wù)代碼時(shí),相當(dāng)于在執(zhí)行代理對(duì)象,就會(huì)相應(yīng)地調(diào)用切面方法。

一個(gè)最簡(jiǎn)單的動(dòng)態(tài)代理實(shí)現(xiàn)如下:

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 }, // 傳入要實(shí)現(xiàn)的接口
            handler); // 傳入處理調(diào)用方法的InvocationHandler
        hello.morning("Bob");
    }
}
interface Hello {
    void morning(String name);
}

結(jié)果將會(huì)輸出

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

其中InvocationHandler就是代理類的代碼,而AOP就是機(jī)遇動(dòng)態(tài)代理來實(shí)現(xiàn)的,你可以自由發(fā)揮,在代理類里使用你自己想要的代碼。

其實(shí),除了IOC和AOP之外,spring里還有很多我們經(jīng)常在用的組件和模塊,比如事務(wù),比如JDBC,再比如JMS(消息服務(wù))等等,這些常用的技術(shù)組件都被整合到了spring框架中,非常便于我們的使用。

springmvc

講完了spring,接下來就該聊聊springmvc了,

據(jù)百度百科介紹,Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊。使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時(shí),可以選擇使用Spring的Spring MVC框架或集成其他MVC開發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts 2(一般老項(xiàng)目使用)等。

什么是spring和springMVC

作為一個(gè)web開發(fā)者,光有spring的AOP和IOC恐怕還無法支持你開發(fā)出一個(gè)頁(yè)面,springmvc的作用就是為了幫你實(shí)現(xiàn)最高效的web開發(fā),告別structs框架。

簡(jiǎn)單來說,springmvc提供了一套典型的mvc開發(fā)模式,m也就是model層,負(fù)責(zé)提供數(shù)據(jù)模型,以及和數(shù)據(jù)庫(kù)進(jìn)行交互,而C代表的是controller,負(fù)責(zé)分發(fā)和處理web請(qǐng)求,這里指的是HTTP請(qǐng)求,一般的controller會(huì)處理對(duì)應(yīng)url的web請(qǐng)求,并且返回相應(yīng)的內(nèi)容,而在返回內(nèi)容的這部分功能,則需要v也就是view層來提供了,畢竟頁(yè)面的渲染是很麻煩的一件事情,返回對(duì)象可能是文本,可能是json,也可能是一個(gè)html頁(yè)面,view層就用于處理這些工作。

MVC的開發(fā)模式確實(shí)解決了web工程師的很多問題,springmvc作為mvc框架的先行者也很自然地成為了Java中的霸主。

隨著Java技術(shù)的發(fā)展和更迭,如今Java能做的事情已經(jīng)遠(yuǎn)不止web開發(fā)了,現(xiàn)在流行的微服務(wù)、中間件很多都是用Java來實(shí)現(xiàn)的,而spring生態(tài)自然也會(huì)隨之發(fā)展,由此出現(xiàn)的springboot、springcloud也已經(jīng)成為了業(yè)界的開源框架的標(biāo)桿。

到此,相信大家對(duì)“什么是spring和springMVC”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

文章名稱:什么是spring和springMVC-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article42/dhiihc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、品牌網(wǎng)站建設(shè)、App設(shè)計(jì)、虛擬主機(jī)、網(wǎng)站設(shè)計(jì)公司云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)