一、Spring中AOP的應用場景、AOP原理、好處?前端
答:AOP:Aspect Oriented Programming面向切面編程;用來封裝橫切關注點,具體能夠在下面場景中使用:java
Authentication權限、Caching緩存、Contextpassing內容傳遞、Error handing錯誤處理、Lazy loading懶加載、Debugging調試、logging、tracing、profiling and monitoring記錄跟蹤優化校準、Persistence持久化、Resource pooling資源池、Synchronization同步、Transactions事務原理;spring
原理:AOP是面向切面編程,是經過動態代理的方式爲程序添加統一功能,集中解決一些公共問題。數據庫
優勢:一、各個步驟之間的良好隔離性耦合性大大下降;編程
二、源代碼無關性,再擴展功能的同時不對源碼進行修改操做。後端
二、Spring中IOC的做用與原理?對象建立的過程。設計模式
答:IOC:Inversion Of Control控制反轉。緩存
當某個角色須要另一個角色協助的時候,在傳統的程序設計過程當中,一般由調用者來建立被調用者的實例對象。服務器
但在spring中建立被調用者的工做再也不由調用者來完成,所以稱爲控制反轉。建立被調用者的工做由spring來完成,而後注入調用者直接使用。session
三、介紹Spring框架
答:它是一個一站式(full-stack全棧式)框架,提供了從表現層-springMVC到業務層-spring再到持久層-springdata的一套完整的解決方案。咱們在項目於中能夠只使用spring一個框架,它就能夠提供表現層的mvc框架,持久層的Dao框架。它的兩大核心IOC和AOP更是爲咱們程序解耦和代碼簡潔易維護提供了支持。
四、Spring常見建立對象的註解?
答:@Component、@Controller、@Service、@Repository
五、Spring中用到的設計模式?
答:簡單工廠、工廠方法、單例模式、適配器、包裝器、代理、觀察者、策略、模板方法。
六、Spring的優勢?
答:一、下降了組件之間的耦合性,實現了軟件各層之間的解耦;
二、可使用容易提供的衆多服務,如事務管理,消息服務等;
三、容器提供單例模式支持;
四、容器提供了AOP技術,利用它很容易實現如權限攔截,運行期監控等功能;
五、容器提供了衆多的輔助類,能加快應用的開發;
六、spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等
七、spring屬於低侵入式設計,代碼的污染極低;
八、獨立於各類應用服務器;
九、spring的DI機制下降了業務對象替換的複雜性;
十、spring的高度開放性,並不強制應用徹底依賴於spring,開發者能夠自由選擇spring的部分或所有
七、Spring Bean的做用域之間有什麼區別?
答:spring容器中的bean能夠分爲5個範圍。全部範圍的名稱都是自說明的,可是爲了不混淆,仍是讓咱們來解釋一下:
一、singleton:這種bean範圍是默認的,這種範圍確保無論接受到多少個請求,每一個容器中只有一個bean的實例,單例模式由bean factory自身來維護;
二、prototype:原形範圍與單例範圍相反,爲每個bean請求提供一個實例;
三、request:在請求bean範圍與單例範圍相反,爲每個bean請求提供一個實例;
四、session:與請求範圍相似,確保每一個session中有一個bean的實例,在session過時後,bean會隨之失效;
五、global-session:global-session和Portlet應用相關。當你的應用部署在Portlet容器中工做時,它包含不少portlet。若是你想要聲明讓全部的portlet共用全局的存儲變量的話,那麼這全局變量須要存儲在global-session中。
全局做用域與Servlet中session做用域效果相同。
八、Spring管理事務有幾種方式?
答:有兩種方式:
一、編程式事務,在代碼中硬編碼。(不推薦使用)
二、聲明式事務,在配置文件中配置(推薦使用)
聲明式事務又分爲兩種:
a、基於XML聲明式事務;
b、基於註解的聲明式事務。
九、Spring中自動裝配的方式有哪些?
答:一、No:即不啓用自動裝配;
二、byName:經過屬性名字的方式查找JavaBean依賴的對象併爲其注入。
好比說類Computer有個屬性printer,指定其autowire屬性爲byName後,Spring IOC容器會在配置文件中查找id/name屬性爲printer的bean,而後使用Setter方法爲其注入。
三、byType:經過屬性類型查找JavaBean依賴的對象併爲其注入。
好比類Computer有個屬性printer,類型爲Printer,那麼,指定其autowire屬性爲byType後,Spring IOC容器會查找Class屬性爲Printer的bean,使用Setter方法爲其注入。
四、constructor:與byType同樣,也是經過類型查找依賴對象。
與byType的區別在於它不是使用Setter方法注入,而是使用構造器注入。
五、autodetect:在byType和constructor之間自動的選擇注入方式。
六、default:由上級標籤<beans>的default-autowire屬性肯定。
十、Spring中的核心類有哪些,各有什麼做用?
答:一、BeanFactory:產生一個新的實例,能夠實現單例模式;
二、BeanWrapper:提供統一的get及set方法;
三、ApplicationContext:提供框架的實現,包括BeanFactory的全部功能。
十一、Bean的調用方式有哪些?
答:有三種方式能夠獲得Bean並進行調用:
一、使用BeanWrapper
1 HelloWorld hw = new HelloWorld() ; 2 BeanWrapper bw = bew BeanWrapper(hw) ; 3 bw.setPropertyValue("msg" , "HelloWorld") ; 4 System.out.println(bw.getPropertyCalue("msg")) ;
二、使用BeanFactory
1 InputStream is = new FileInputStream("config.xml") ; 2 XmlBeanFatory fatory = new XmlBeanFatory(is) ; 3 HelloWorld hw = (HelloWorld)factory.getBean("HelloWorld") ; 4 System.out.println(hw.getMsg()) ;
三、使用ApplicationContext
1 ApplicationContext context= new FleSystemXmlApplicationContext("config.xml") ; HelloWorld hw = (HelloWorld)context.getBean("HelloWorld") ; System.out.println(hw.getMsg()) ;
十二、什麼是IOC,什麼又是DI,他們有什麼區別?
答:依賴注入DI是一個程序設計模式和架構模型,一些時候也稱做爲控制反轉,儘管在技術上來說,依賴注入是IOC的一個特殊實現,依賴注入是指一個對象應用另一個對象來提供一個特殊的能力,
例如:把一個數據庫已鏈接的參數的形式傳到一個對象的結構方法裏面而不是在那個對象內部自行建立一個鏈接。
控制反轉和依賴注入的基本思想就是把類的依賴從類內部轉化到外部以減小依賴應用控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用,傳遞給它。也能夠說,依賴注入到對象中。
因此,控制反轉是,關於一個對象如何獲取他所依賴的對象的引用,這個責任的反轉。
1三、Spring有兩種代理方式:
答:若目標對象實現了若干接口,spring使用JDK的java.lang.reflect.Proxy代理。
優勢:由於有接口,因此使系統更加鬆耦合;
缺點:爲每個目標類建立接口,若目標對象沒有實現任何接口,spring使用CGLIB庫生成目標對象的子類。
優勢:由於代理類與目標類是繼承關係,因此不須要有接口的存在;
缺點:由於沒有使用接口,因此係統的耦合性沒有使用JDK的動態代理好。
1四、SpringMVC的流程?
答:一、用戶發送請求至前端控制器DispatcherServlet;
二、DispatcherServlet收到請求調用HandlerMapping處理器映射器;
三、處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截對象(若是有則生成)一併返回給DispatcherServlet;
四、DispatcherServlet經過HandlerAdapter處理器適配器調用處理器;
五、執行處理器(Controller,也叫後端控制器);
六、Controller執行完成返回ModelAndView;
七、HandlerAdapter將Controller執行結果ModelAndView返回給DispatcherServlet;
八、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器;
九、ViewReslover解析後返回具體View;
十、DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中);
十一、DispatcherServlet響應用戶。
1五、SpringMVC的優缺點?
答:優勢:
一、它是基於組件技術的、所有的應用對象,不管控制器和視圖,仍是業務對象之類的都是java組件,而且和Spring提供的其餘基礎結構緊密集成;
二、不依賴於Servlet API(目標雖是如此,可是在實現的時候確實是依賴於Servlet的);
三、支持各類請求資源的映射策略;
四、它應是易於擴展的。
缺點:
一、Spring與MVC 的Servlet API 耦合,難以脫離容器獨立運行;
二、太過於細分,開發效率低;
三、過分追求完美,有過分設計的危險。