java中的spring
① java下SpringMVC中Spring的主要工作原理是什麼是怎麼工作的工作流程是什麼
一、 IoC(Inversion of control): 控制反轉 x0dx0a1、IoC: x0dx0a概念:控制權由對象本身轉向容器;由容器根據配置文件去創建實例並創建各個實例之間的依賴關系 x0dx0a核心:bean工廠;在Spring中,bean工廠創建的各個實例稱作bean x0dx0a二、AOP(Aspect-Oriented Programming): 面向方面編程 x0dx0a1、 代理的兩種方式: x0dx0a靜態代理: x0dx0a 針對每個具體類分別編寫代理類; x0dx0a 針對一個介面編寫一個代理類; x0dx0a動態代理: x0dx0a針對一個方面編寫一個InvocationHandler,然後借用JDK反射包中的Proxy類為各種介面動態生成相應的代理類 x0dx0a2、 AOP的主要原理:動態代理 x0dx0ax0dx0aSpring工作原理 x0dx0a Spring 已經用過一段時間了,感覺Spring是個很不錯的框架。內部最核心的就是IOC了, x0dx0a動態注入,讓一個對象的創建不用new了,可以自動的生產,這其實就是利用java里的反射 x0dx0a反射其實就是在運行時動態的去創建、調用對象,Spring就是在運行時,跟xml Spring的配置 x0dx0a文件來動態的創建對象,和調用對象里的方法的 。 x0dx0a Spring還有一個核心就是AOP這個就是面向切面編程,可以為某一類對象 進行監督和控制(也就是 x0dx0a在調用這類對象的具體方法的前後去調用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是通過 x0dx0a配置類達到的。 x0dx0a Spring目的:就是讓對象與對象(模塊與模塊)之間的關系沒有通過代碼來關聯,都是通過配置類說明 x0dx0a管理的(Spring根據這些配置 內部通過反射去動態的組裝對象) x0dx0a 要記住:Spring是一個容器,凡是在容器里的對象才會有Spring所提供的這些服務和功能。 x0dx0aSpring里用的最經典的一個設計模式就是:模板方法模式。(這里我都不介紹了,是一個很常用的設計模式) x0dx0a Spring里的配置是很多的,很難都記住,但是Spring里的精華也無非就是以上的兩點,把以上兩點跟理解了 x0dx0a也就基本上掌握了Spring.
② java中Spring解決了什麼問題
◆Spring能有效地組織你的中間層對象,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發現Spring關注了遺留下的問題。 ◆Spring能消除在許多工程上對Singleton的過多使用。根據我的經驗,這是一個主要的問題,它減少了系統的可測試性和面向對象特性。 ◆Spring能消除使用各種各樣格式的屬性定製文件的需要,在整個應用和工程中,可通過一種一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。 ◆Spring能通過介面而不是類促進好的編程習慣,減少編程代價到幾乎為零。 ◆Spring被設計為讓使用它創建的應用盡可能少的依賴於他的APIs。在Spring應用中的大多數業務對象沒有依賴於Spring。 ◆使用Spring構建的應用程序易於單元測試。 ◆Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務介面,卻不會影響調用代碼。 ◆Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用AOP提供聲明性事務而不通過使用EJB容器,如果你僅僅需要與單個的資料庫打交道,甚至不需要JTA實現。 ■Spring為數據存取提供了一致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。
③ 我的java項目中spring事務總是出問題是怎麼回事
1、首先使用如下代碼 確認你的bean 是代理對象嗎?
必須是Spring定義(通過XML或註解定義都可以)的Bean才接受事務。
直接new出來的對象添加事務是不起作用的。
可以通過以下方式判斷是否是代理對象:
AopUtils.isAopProxy(Object object)
AopUtils.isCglibProxy(Object object) //cglib
AopUtils.isJdkDynamicProxy(Object object) //jdk動態代理
2、入口函數必須是public,否則事務不起作用。這一點由Spring的AOP特性決定的。
3、切入點配置錯誤。
<!-- 使用annotation註解方式配置事務 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<!--使用切面方式配置事務-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" isolation="READ_COMMITTED" propagation="REQUIRED" rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pointcut" expression="execution(* com.tyyd..*Service.do*(..))"/>
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut"/>
</aop:config>
4、如果你使用了springmvc,可能是context:component-scan重復掃描引起的:
5、如使用mysql且引擎是MyISAM造成的(因為不支持事務),改成InnoDB即可。
④ 請問有誰知道java里spring的理解怎麼回答嗎
通俗一點,首先spring是一個輕量級的容器,用來放bean,這一點很好理解。
有了這個容器,當我們想要創建一個service時,就可以直接從這個容器里拿;或者你想在一個service里調用DAO也不需要在service里創建,因為spring會從容器取出DAO,並注入到service里,也就是依賴注入。
調用者和被調用者之間的關系也是由這個容器來維護的,這就是控制反轉。
spring核心的東西:依賴注入 、控制反轉、面向切面
前面2個用的比較多,面向切面也就在資料庫的聲明式事務管理、記錄日誌的時候用
⑤ 北大青鳥java培訓:Spring入門學習指南
我們都知道,java編程中會涉及到一個框架,就是Spring,很多程序員在日常工作中也會接觸到Spring,在這里河北java培訓http://www.kmbdqn.cn/就給大家做一個詳細介紹吧。
毋庸置疑,Spring早已成為Java後端開發事實上的行業標准,無數的公司選擇Spring作為基礎的開發框架,大部分Java後端程序員在日常工作中也會接觸到Spring。
早些年框架還沒有那麼豐富,後面出現了SpringBoot和SpringCloud,它們可以幫助工程師更好地基於Spring及各種基礎設施來快速搭建系統,可以說,它們的誕生又一次解放了大家的生產力。
SpringBoot和SpringCloud這兩個框架已然成為Spring生態中不可或缺的一環。
想成為一名合格的Java後端工程師,SpringFramework、SpringBoot、SpringCloud這三者必須都牢牢掌握。
上述很多知識點都會在北大青鳥Java培訓課程中都有涉及到,整個課程以實戰為主,在基礎的實踐之外,還會涉及一些背後的原理與相關的知識擴展。
⑥ 如何學習java spring框架
1、打好基礎是重中之重
基礎部分可能很枯燥,但是一定要耐心堅持下去。因為打基礎好比是在造輪子造汽車,沒有打好基礎在後面的學習就好比走路,可以說後面遇到的百分之七八十的問題都是基礎沒學好造成的。
2、多看官方文檔多讀源碼
一定要看JDK相關類庫、常用框架各種功能的源碼,去了解其底層實現的原理。總的來說這個也是在打基礎的部分,Java基礎非常扎實才能看懂,在我們學習一個類的源碼時,肯定會衍生出其他各種各樣的問題,供我們來了解和學習,這也就是我們下一步學習的目標和方向。慢慢的,我們就會學習更多的知識,並積累更多的經驗。
3、系統性學習,循序漸進
不要急於求成,每個知識點都要看,並且每個知識點都要勤加練習。有的同學在學習過程中覺得這個知識點簡單,就跳著學習,其實這是個很大的問題,知識點細節必須要了解。我們學習Java需要循序漸進,一步一步來,不能操之過急。
4、遇到問題
遇到不會做的問題,當然不能置之不理。先在網上查,目前網路上針對很多問題都有完美的解決方案,如果網上沒有類似的問題,那可能是你犯了什麼小錯誤。也不要在這個問題上花費太多時間,這需要一定的學習技巧。Java中的知識有很強的相關性,有不懂的地方,可以用其他周邊相關知識再回過頭來理解,這樣既不會耽誤學習進度,又能理解自己不懂的地方
1)jvm有很多種,其實jvm是一個標准,sun做的那個叫hotspot,作者就是後來v8的作者lars bak,其他公司也做過jvm,其中做得比較好的有bea的jrockit,其他的包括ibm的r9,apple的jvm等在內,都做得不行,所以jvm主要是整合淘汰掉這些做得不好的jvm(s),整合成一個統一的openjdk。
2)java是典型的oop語言,其執行效率的優化,最早就是lars bak等人從smalltalk等長期優化的經驗中總結出來並apply到hotspot上去滴,而smalltalk在早期apple機上搞出了那種拖拖拽拽就開發出app的做法,後來vc,delphi之類的其實都是抄襲或者說借鑒apple的smalltalk的做法,jobs說微軟從頭到尾都在抄襲apple是空穴來風,這里空穴來風跟王垠使用的空穴來風是一個意思,有趣的是,java的gui並沒有繼承這種搞法,反而對這種拖拖拽拽就作出app的做法批判有加,到今天,其實java的gui都還不能真正做到拖拖拽拽就作出來,問題很多,個人建議對於純java的gui開發,還是以寫代碼為主。
3)jee也是一個或者說是一堆標准,知乎上有些人把maven,jenkins都算做jee是不對滴,jee的標准核心是ejb,其實就是一個xml配置化的java文件,這個標准在4的時候,達到了頂峰狀態,幾乎所有的挨踢大廠都主動支持該標准,之後開始走下坡路,支持的廠越來越少。
4)java和javascript的關系比很多人認為的要密切,javascript裡面的java這四個字母可不是白叫的,比如js的版權和商標都控制在oracle手裡,oracle對於js的支持甚至超過其對java的支持,並且喜歡捆綁銷售,比如jvm裡面就有一個js引擎。
5)jvm裡面除了js engine以外還有一個瀏覽器排版引擎webkit,就是apple safari和google chrome用的那個那個。
6)java支持絕大多數腳本語言,你能叫得上名字的腳本語言,幾乎都可以在jvm上執行,比如常見的js,ruby,python,甚至php,lua,只不過除了js以外你需要找到相關的腳本引擎。
7)spring的版權被控制在vmware手裡,其實spring的那一大堆東西,本質上是一個非標準的jee實現,比如在jee裡面用的inject,在spring裡面就是autowire,當然spring曾經深刻滴影響了jee,所以有些東西比如di標准,是spring影響下制定出來的,所以spring的做法會比較特例一點。
8)maven上的jars數量前兩天突破800萬,其他語言的類庫,排名第二的是npm,大概數量是maven的十分之一,也就是幾十萬,不知道現在突破100萬沒有,然後是gem,也就是ruby那個,大概是十幾萬,下來是python的mole,大概數量級是幾萬,沒突破十萬。
9)java的標準是由一個叫做jcp的組織制定的,所有標准需要經過jcp的執行委員會通過方可執行,jcp幾乎包括了你所知道的絕大多數知名挨踢公司和組織,比如google,apple,ibm,intel,arm,red hat,twitter等,還有一些教育機構,比如我國的北京大學,阿里最近一次申請jcp執行委員會成員資格,似乎投票不通過,最近一次執行委員會新增兩個成員是arm和jetbrains。
10)微軟也曾經是jcp甚至是java的主要貢獻者,但是利益驅使下,想擴展java,從而破壞java跨平台的特性,所以跟sun鬧翻,其本質原因就是想讓客戶寫的java代碼跟windows綁定,sun堅決不同意,鬧翻,今天回頭看這個結果,只能說:雙輸,sun掛了,微軟的ria也離掛不太遠了,silverlight已經放棄了,比起當年ie自帶有jvm的支持來說,那完全就是兩回事。
11)除了微軟以外,jcp還缺少一個重要組織apache,因為apache跟oracle也鬧翻了,oracle似乎並不在乎開源組織,而更在意商業公司的支持。
12)java曾經有一個內置的資料庫,9之後被剝離。
13)j2me是j2se的子集。
14)vert.x作者tim fox最早在vmware做spring時候看到了node.js,萌生出了製作支持多核的node.x的想法,並在離開vmware後加入red hat將其實現,vmware看到後開始耍無賴,claim node.x後來改叫vert.x的版權,不惜跟red hat打官司,後來各方妥協,將其交給eclipse foundation。
15)oracle在收購bea之前,一開始的目標並不是bea和bea的weblogic,而是jboss,但是jboss表現出了極為有種的一面,在oracle收購成功之前,投入了red hat的懷抱,因為都是開源組織,從此jboss成了red hat的一個子部門,oracle收購jboss失敗之後,轉向bea,庄思浩氣死了,但是沒用,最後還是被惡意收購。
16)sun在玩不下去之前最早嘗試接觸的目標是ibm,ibm嫌太貴,放棄之後,被轉手給了oracle。(Java學習交流QQ群:589809992 我們一起學Java!)
17)vert.x的作者tim fox在離開red hat之前曾經發過twitter抱怨,外人比如我們,猜測是因為red hat內部已經有了一個jboss,所以跟vert.x在應用上有了重疊,所以導致tim fox的出走,但是出走之後,red hat答應對vert.x做持續性的戰略投入,所以vert.x core的幾個developers,其實拿的是red hat的工資,但是vert.x的版權並不在red hat手裡,而在eclipse foundation手裡。
18)vert.x的幾個核心開發人員都是google summer of code的導師,每年年初時候會招收在校大學生搞項目。
19)教育機構相關:scala的作者馬丁是德國人,eth的博導,groovy的主要領導人是法國人,jruby背後是東京大學,jboss的作者是法國大學校x的校友,x就是伽羅瓦考不進去的那所大學,伽羅瓦進不了x,所以改讀巴黎高師,tim fox畢業於帝國理工,主席去的那個,netty作者trustin lee是acm銀牌,現在line工作,畢業於sky裡面的延世大學,kotlin是毛子公司jetbrains的作品,看linkedin,很多人畢業自聖彼得堡大學,spring作者rod johnson是悉尼大學的音樂博士,hibernate作者gavin king是澳洲莫那什大學的數學本科畢業生,james gosling這種cmu和calgory的估計爛大街了,sun是斯坦福大學網路的意思,夾帶兩個私貨,aspectj有一個維護小組在mcgill,hbase跟waterloo關系密切。
20)java早期被人認為慢,跟java堅持不用硬體加速渲染有關,死活就是不肯接入directx和opengl,7之後總算開竅,搞了一個圖形引擎接入了directx/opengl。
21)casssandra是facebook做失敗的項目,被貢獻給了apache之後老樹開花。
22)groovy被貢獻給了apache,現在叫做apache groovy,ceylon被貢獻給了eclipse,現在叫做eclipse ceylon。
23)netflix現在是java shop,之前是用.net的。
先想到這么多,有空再寫。
⑦ java筆試題 Spring的工作機制是為什麼要用Spring
工作機制是IOC ,IOC是思想 、依賴注入是實現。
1.使用IOC最大程度的對對象的依賴關系解耦
2.使用AOP解除了模塊或組件之間的耦合
3.簡化其他框架的代碼
4.是框架之間的潤滑劑和粘合劑
5.spring 是無侵入的設計。在代碼中感覺不到它的存在
6.spring是無依賴式的設計。spring不依賴任何框架,而且本身也無依賴
⑧ java spring , mybatis, spring boot ,spring mvc 都是什麼
1.1、Spring
Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決應用開發的復雜性而創建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。
1.2、SpringMVC
Spring MVC屬於SpringFrameWork的後續產品,已經融合在Spring Web Flow裡面。Spring MVC 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定製。
1.3、MyBatis
MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。MyBatis是一個基於Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將介面和 Java 的POJOs(Plain Old Java Objects,普通的 Java對象)映射成資料庫中的記錄。
⑨ Java框架Spring是用來干什麼的
spring就是作為容器去管理你的類,有spring管理的類在整個伺服器啟動期間在內存中只生成一份。
Spring的Ioc(控制反轉和依賴注入)
控制反轉:就是由容器控製程序之間的(依賴)關系,而非傳統實現中,由程序代碼直
接操控。
依賴注入:組件之間的依賴關系由容器在運行期決定 ,由容器動態的將某種依賴關系注
入到組件之中。通俗點說,例如A,B兩個類都交由spring管理,A中有B的引用,那麼在配置中可以事先配置好,伺服器啟動時初始化A的時候會自動將B注入到A中,而不用再A中再次去用new來初始化B。spring還可以對事物進行管理。將hibernate的sessionFactory交由spring進行管理。她封裝了所有對事務處理的功能,包括異常時事務回滾,操作成功時數據提交等復雜業務功能。這都是由Spring容器來管理,大大減少了程序員的代碼量,也對事務有了很好的管理控制。
⑩ Java核心技術:Spring是什麼
從簡單性、可測試性和松耦合的角度而言,任何Java應用都可以從Spring中受益。 簡單來說,Spring就是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。 下面從整體上認識一下Spring的主要特徵: *輕量:從大小與開銷兩方面而言Spring都是輕量的。此外,Spring是非侵入式的:使用Spring,我們的類還是pojo類,完全不用繼承和實現Spring的類和介面等。 也就是說,使用Spring的應用中的對象不依賴於Spring的特定類。 *IoC:Spring通過控制反轉技術促進了松耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。可以認為IoC與JNDI相反--不是我們自己控制對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它,這就是DI--依賴注入。 基本上就是對象不用自己動手管理和創建。完全由容器管理,我們只管用就行。 *AOP:Spring提供了面向切面的編程支持,AOP將與程序業務無關的內容分離提取,應用對象只實現它們應該做的--完成業務邏輯--僅此而已。它們並不負責其它的系統級關注點,例如日誌或事務支持。 AOP將與業務無關的邏輯橫切進真正的邏輯中。 *框架:Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),而用戶就有更多的時間和精力去開發應用邏輯。 所有Spring的這些特徵都能幫助我們夠編寫更干凈、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。 *藉助Spring,榮國依賴注入,AOP應用,面向介面編程,來降低業務組件之間的耦合度,增強系統的擴展性。 * 讓已有的技術和框架更加易用。 *利用其對hibernate的SessionFactory、事務管理的封裝,更簡潔的應用hibernate. *Spring並不完全依賴於Spring,開發者可自由選用Spring框架的部分或全部 *利用AOP思想,集中處理業務邏輯,減少重復代碼,構建優雅的解決方案。 *低侵入式設計,代碼污染極低。 Spring致力於J2EE應用的各層的解決方案,而不是僅僅專注於某一層的方案。可以說Spring是企業應用開發的"一站式"選擇,並貫穿表現層、業務層及持久層。 雖然Spring可以一站式解決整個項目問題,但是Spring並不想取代那些已有的框架,而是與它們無縫地整合。Spring可以降低各種框架的使用難度,他提供了對各種優秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。 使用Spring的主要目的是使J2EE易用和促進好的編程習慣,Spring的目標就是讓已有的技術更加易用。 所以Spring的一個重要思想就是整合和兼容。