本篇內(nèi)容主要講解“什么是spring和springMVC”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“什么是spring和springMVC”吧!
成都創(chuàng)新互聯(lián)公司專注于張掖企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開(kāi)發(fā)。張掖網(wǎng)站建設(shè)公司,為張掖等地區(qū)提供建站服務(wù)。全流程按需規(guī)劃網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)你第一次接觸spring框架是在什么時(shí)候?相信很多人和我一樣,第一次了解spring都不是做項(xiàng)目的時(shí)候用到,而是在網(wǎng)上看到或者是聽(tīng)到過(guò)一個(gè)叫做spring的框架,這個(gè)框架號(hào)稱完爆之前的structs和structs2,吸引了不少人的注意。
那么,spring到底有沒(méi)有神奇呢,據(jù)記載,spring框架出現(xiàn)的時(shí)間是在2002年,當(dāng)時(shí)的人們對(duì)于繁瑣笨重的EJB框架詬病不已,而且對(duì)于structs這類框架也沒(méi)有什么好感,這個(gè)時(shí)候spring從天而,救一大批Java開(kāi)發(fā)者于水火之中。
讓我們先看看百度百科對(duì)于spring的定義,Spring框架是由于軟件開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性角度而言,絕大部分Java應(yīng)用都可以從Spring中受益。
◆目的:解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能
◆范圍:任何Java應(yīng)用
Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
spring框架解決了程序員在Java開(kāi)發(fā)中長(zhǎng)期存在的兩個(gè)痛點(diǎn),那就是bean管理和統(tǒng)一切面,而spring的IOC和AOP恰好解決了這兩個(gè)問(wèn)題。
其實(shí),spring生態(tài)中的內(nèi)容豐富多彩,除了上圖提到的這些模塊,如今spring已經(jīng)發(fā)展到了springboot和springcloud,為微服務(wù)等后端技術(shù)棧提供非常優(yōu)質(zhì)的解決方案。
如今,spring框架已經(jīng)成為Java程序員必知必會(huì)的內(nèi)容了,那么如何開(kāi)始學(xué)習(xí)spring框架,就成為了我們今天要討論的主題。
首先,先來(lái)看看spring基礎(chǔ)部分應(yīng)該如何學(xué)習(xí)。
spring的核心就是IOC和AOP了,把這兩點(diǎn)搞懂,你就可以說(shuō)自己學(xué)會(huì)了spring(然而并不是)
首先來(lái)看看IOC,IOC的本質(zhì)就是把bean的管理交給框架去做,spring自己維護(hù)一個(gè)bean容器,將所有bean進(jìn)行統(tǒng)一管理,這樣一來(lái),所有需要用到實(shí)例的場(chǎng)景都不需要寫(xiě)繁瑣且重復(fù)的實(shí)例化代碼,而是簡(jiǎn)單地完成bean聲明和注入依賴就可以了。
舉個(gè)簡(jiǎn)單的例子。
假如沒(méi)有spring的IOC,我們管理實(shí)例時(shí)可能很不方便,比如下面這段代碼,我們必須要在構(gòu)造方法里對(duì)userService和bookservice進(jìn)行實(shí)例化,并且注入相應(yīng)的依賴,否則它自己是沒(méi)有辦法完成初始化的。甚至,我們?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來(lái)進(jìn)行特殊處理,而@
Autowired這個(gè)注解,則可以把userService和bookservice的實(shí)例都注入到QueryController里,而這一切,都是因?yàn)閟pring的IOC幫你實(shí)現(xiàn)了bean管理。
當(dāng)然了,userService和bookservice本身也可以把自己對(duì)應(yīng)的dao層依賴(持久層)通過(guò)IOC方式進(jìn)行注入。
說(shuō)完了IOC,再來(lái)看看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來(lái)做成一個(gè)切面,然后指定需要攔截的方法,AOP通過(guò)動(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)代理來(lái)實(shí)現(xiàn)的,你可以自由發(fā)揮,在代理類里使用你自己想要的代碼。
其實(shí),除了IOC和AOP之外,spring里還有很多我們經(jīng)常在用的組件和模塊,比如事務(wù),比如JDBC,再比如JMS(消息服務(wù))等等,這些常用的技術(shù)組件都被整合到了spring框架中,非常便于我們的使用。
講完了spring,接下來(lái)就該聊聊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開(kāi)發(fā)時(shí),可以選擇使用Spring的Spring MVC框架或集成其他MVC開(kāi)發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts 2(一般老項(xiàng)目使用)等。
作為一個(gè)web開(kāi)發(fā)者,光有spring的AOP和IOC恐怕還無(wú)法支持你開(kāi)發(fā)出一個(gè)頁(yè)面,springmvc的作用就是為了幫你實(shí)現(xiàn)最高效的web開(kāi)發(fā),告別structs框架。
簡(jiǎn)單來(lái)說(shuō),springmvc提供了一套典型的mvc開(kāi)發(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層來(lái)提供了,畢竟頁(yè)面的渲染是很麻煩的一件事情,返回對(duì)象可能是文本,可能是json,也可能是一個(gè)html頁(yè)面,view層就用于處理這些工作。
MVC的開(kāi)發(fā)模式確實(shí)解決了web工程師的很多問(wèn)題,springmvc作為mvc框架的先行者也很自然地成為了Java中的霸主。
隨著Java技術(shù)的發(fā)展和更迭,如今Java能做的事情已經(jīng)遠(yuǎn)不止web開(kāi)發(fā)了,現(xiàn)在流行的微服務(wù)、中間件很多都是用Java來(lái)實(shí)現(xiàn)的,而spring生態(tài)自然也會(huì)隨之發(fā)展,由此出現(xiàn)的springboot、springcloud也已經(jīng)成為了業(yè)界的開(kāi)源框架的標(biāo)桿。
到此,相信大家對(duì)“什么是spring和springMVC”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!