本文做者: 吳偉祥java
本文連接: https://wuweixiang.cn/2018/08/21/Spring-Boot實戰之基礎回顧/spring
版權聲明: 本博客全部文章除特別聲明外均爲原創,採用CC BY-NC-SA 4.0 許可協議。轉載請在文章開頭明顯位置註明原文連接和做者等相關信息,明確指出修改(若有),並經過 E-mail 等方式告知,謝謝合做!數據庫
Java EE,Java平臺企業版(Java Platform Enterprise Edition),以前稱爲Java 2 Platform, Enterprise Edition (J2EE),2018年3月改名爲Jakarta EE。是Sun公司爲企業級應用推出的標準平臺。Java平臺共分爲三個主要版本Java EE、Java SE和Java ME。編程
Java EE是一系列技術標準所組成的平臺,包括:緩存
Servlet - Java Servlet API安全
JDBC - Java數據庫聯接(Java Database Connectivity)服務器
JSP - Java服務器頁面(Java Server Pages)架構
JSTL - Java服務器頁面標準標籤庫(Java Server Pages Standard Tag Library)mvc
JMS - Java消息服務(Java Message Service)app
Applet - Java Applet
EJB - 企業級JavaBean(Enterprise Java Beans)
JAAS - Java Authentication and Authorization Service
JACC - J2EE Authorization Contract for Containers
JAF - Java Beans Activation Framework
JAX-RPC - Java API for XML-Based Remote Procedure Calls
JAX-WS - Java API for XML Web Services
JAXM - Java API for XML Messaging
JAXP - Java XML解析API(Java API for XML Processing)
JAXR - Java API for XML Registries
JCA - J2EE鏈接器架構(J2EE Connector Architecture)
JMX - Java Management
JNDI - Java名稱與目錄接口(Java Naming and Directory Interface)
JSF - Java Server Faces
JTA - Java事務API(Java Transaction API)
JavaMail
StAX - Streaming APIs for XML Parsers
WS - Web Services
Spring每一個新版本的推出都以減小配置做爲本身的主要目標
在Spring 1.x時代,使用Spring 開發滿眼都是xml配置的Bean,隨着項目的擴大,咱們須要把xml配置文件放到不一樣的配置文件裏,那時候須要頻繁地在開發的類和配置文件之間切換。
在Spring 2.x 時代,隨着JDK1.5帶來的註解支持,Spring提供了聲明Bean的註解(例如@Component、@Service),大大減小了配置量。主要使用的方式是應用的基本配置(如數據庫配置)用xml,業務配置用註解。
Spring 3.0 引入了基於 Java 的配置能力,這是一種類型安全的可重構配置方式,能夠代替 XML。咱們目前恰好處於這個時代,Spring4.x開始都推薦使用Java配置。
在當前Java EE 開發中,Spring框架是當之無愧的王者。Spring框架是一個輕量級的企業級開發的一站式解決方案。所謂解決方案就是能夠基於spring解決Java EE開發的全部問題。Spring框架提供了IoC容器,AOP、數據訪問、Web開發、消息、測試等相關技術的支持。
Spring 使用簡單的POJO(Plain Old Java Object,即無任何限制的普通Java對象)來進行企業級開發。每個被Spring管理的Java對象都稱之爲Bean;而Spring提供了一個IoC容器來初始化對象,解決對象間的依賴管理和對象的使用。
簡單地說,這六個模塊實現的功能分別爲:
Ø 核心容器:核心模塊,提供了IoC/DI容器
Ø AOP:AOP的實現和AspectJ的支持
Ø 消息:提供對基於消息應用的支持,提供與Spring Integration的集成
Ø 數據訪問與集成:JDBC訪問的簡化、事務的支持,ORM(Object Relation Mapping)框架(如JPA、Hibernate和Mybatis等)與OXM(Object XML Mapping)框架的集成
Ø Web:Spring MVC的實現,能集成衆多模板引擎技術(如Thymeleaf、JSP與Velocity等)
Ø 測試:提供大量Mock對象,支持單元測試;提供Spring Context的測試支持,支持集成測試
1)使用POJO進行輕量級和最小侵入式開發。
2)經過依賴注入和基於接口編程實現鬆耦合。
3)經過AOP和默認習慣進行聲明式編程。
4)使用AOP 和模板減小模式化代碼。
Spring全部功能的設計和實現都是基於此四大原則。
Inversion of Control – IOC 和Dependency injection –DI 在Spring環境下是等同的概念,控制翻轉是經過依賴注入實現的。所謂的依賴注入指的是容器負責建立對象和維護對象間的依賴關係,而不是經過對象自己負責本身的建立和解決本身的依賴。
依賴注入體現了一種「組合」的理念。主要目的是爲了解耦。
Spring IoC容器(ApplicationContext)負責建立Bean,並經過容器將功能類Bean注入到你須要的Bean中。不管是xml配置、註解配置仍是Java配置,都被稱爲配置元數據(元數據=描述數據的數據)。元數據自己不具有任何可執行的能力,只能經過外界代碼來對這些元數據行解析後進行一些有意義的操做。Spring容器解析這些配置元數據進行Bean初始化、配置和管理依賴。
聲明Bean的註解:
Ø @Component(沒有明確的角色)
Ø @Service(Service層)
Ø @Repository(Dao層)
Ø @Controller(表現層 MVC ->Spring MVC)
注入Bean的註解(可註解在Set方法和屬性上):
Ø @Autowired
Ø @Inject
Ø @Resource
Java配置是Spring 4.x推薦方式,能夠徹底替代xml配置;Java配置也是Spring Boot推薦的配置方式。
Java配置是經過@Configuration和@Bean來實現的。
Ø @Configuration聲明當前類是一個配置類,至關於一個Spring配置的xml文件
Ø @Bean註解在方法上,聲明當前方法的返回值爲一個Bean
什麼時候使用Java配置或者註解配置呢?
全局配置:使用java配置(如數據庫相關配置、MVC相關配置)
業務Bean的配置:使用註解配置
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }
等價於spring的xml裏的配置
<beans> <bean id="myService" class="com.zhoan.service.impl.MyServiceImpl"/> </beans>
Spring支持的AspectJ註解式切面編程
(1)使用@Aspect聲明是一個切面
(2)使用@After,@Before,@Around 定義建言(advice),能夠直接將攔截規則(切點PointCut)做爲參數
(3)爲了使切點複用,可以使用@PointCut專門定義攔截規則,而後在@After,@Before,@Around的參數中調用
(4)其中符合條件的每個被攔截處爲鏈接點(JoinPoint)
註解式攔截可以很好的控制要攔截的粒度和得到更豐富的信息,Spring自己在事務處理(@Transcational)和數據緩存池(@Cacheable)等上面都使用了此種形式的攔截
MVC和三層架構是什麼關係?
MVC:Model + View + Controller (數據模型+視圖+控制器)
三層架構:Presentation tier + Application tier + Data tier(表現層+應用層+數據訪問層)
三層架構是一種軟件架構設計理念,適用於全部項目;
而mvc只是表現層的一種細化。把表現層劃分爲M -V- C三個模塊。
聲明Bean的註解都組合了@Component元註解,但在SpringMVC聲明控制器Bean的時候,只能用@Controller
用來映射Web請求(訪問路徑和參數)、處理類和方法的。方法上的@RequestMapping路徑會集成註解在類上的路徑。
支持返回值放在response體內,而不是返回一個頁面
用來接收路徑參數,如/news/{a},/news/1能夠接收1做爲a的參數值
組合註解,組合了@Controller和@ResponseBody
Ø 靜態資源映射
Ø 攔截器配置
Ø 視圖解析器配置
Ø 文件上傳配置
Ø 自定義HttpMessageConverter