【JavaWeb】SpringFramework註解的發展與演變,從Spring 1.x到Spring 5.x

一、前言

SpringFramework註解的發展過程就是一個不斷消除xml文件的過程。

二、Spring1.x

Spring 1.x 提供IOC功能,即不再通過new來創建,而是通過bean來管理,在xml配置

<bean name="" class="" />   

Spring 1.x 只有一個@Transaction 註解,整個項目的IOC都是通過xml配置文件來完成。

代碼演示:

新建一個HelloService,

在這裏插入圖片描述

spring配置文件applicationContext.xml中配置
在這裏插入圖片描述

主函數運行:

在這裏插入圖片描述

小結:spring1.x spring配置文件applicatonContext.xml 中一大堆的

三、Spring2.x

爲了解決spring1.x spring配置文件applicatonContext.xml 中一大堆的,Spring 2.x 發生變革。

Spring2 引入了 @Required/@Repository(用於dao層)/@Aspect 等註解。

特別是spring 2.5,引入大量註解,包括:
@Component(用於非service組件)
@Service (用於service層)
@Controller (用於controller層)
@RequestMapping (用於接收請求,一般404就是這裏的問題)

Spring2.x版本,特別是spring 2.5 通過引入@Controller @Service只寫註解,配合上註解掃描,徹底解決spring配置文件中一大堆的的問題。

代碼演示:

新建Hello2Service,使用註解@Service

在這裏插入圖片描述

在這裏插入圖片描述
主函數運行

在這裏插入圖片描述

在spring2.x,我們知道 註解+掃描 == xml,註解不再applicationContext.xml文件大,但是掃描還在applicationContext.xml中,我們的下一步目的是將掃描從applicationContext.xml中取出,去xml化。

@Autowired @Resource
自動裝配,Bean類中不再需要setter-getter,項目中,常用的是,在controller自動裝配service,在serviceImpl中裝配Mapper。

@Component
不再需要在applicationContext.xml中寫各種,只要在具體Bean類上面加上@Component,在applicationContext.xml中<context:component-scan
base-package=“xxxx”/> 項目中,使用 @Controller @Service @Repository然後用
component-scan 掃描。(注意@Mapper不是這樣,它是ibatis註解,使用@MapperScan掃描)

問題:Spring2.x 還是需要配置文件applicationContext.xml,能否將這個文件去掉呢?

四、Spring3.x(無配置化bean裝配)

爲了解決Spring2.x 中還是需要配置文件applicationContext.xml,Spring 3.x 出來了。

spring3.x 如何實現完全去xml化?

Spring3.x 的兩大革新:

第一,對於自己的東西,即bean的class爲自己類的東西,去xml化,使用@Configuration+@ComponentScan+其他具體註解;

第二,對於第三方組件的東西,即bean的class不是自己的,使用@Enable模塊驅動。

4.1 自己的bean去xml化

4.1.1 去xml化解決IOC

spring 3.x 是一個里程碑版本,全面擁抱Java5,全面支持註解annotation(其中,最重要的是,提供一個取代applicationContext.xml配置文件的註解 @Configuration和@ComponentScan,可以去掉applicationContext.xml文件)

@ComponentScan用來掃描 @Controller @Service @Repository
註解替換xml的核心 xml == 註解+掃描所以xml是不需要掃描的,但是註解一定要掃描

方式1:@Configuration + @Bean
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

方式2:@Configuration + @ComponentScan +@Service(這個@Service可以是其他,只要能掃描到就可以)

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

4.1.2 去xml化解決依賴注入

核心目的是:把bean對象如何更加快捷的方式加入的Spring IOC容器中

方式1:@Configuration + @Bean

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

方式2:@Configuration + @ComponentScan +@Service(這個@Service可以是其他,只要能掃描到就可以)

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

4.1.3 @Import註解(擴大掃描範圍)

爲了需要完全去xml化,還有其他註解,比如@Import註解。

@Import註解和 標籤一樣,在spring配置文件中,導入另外一個jar包或某一個目錄下的配置文件,合併導入的配置文件的信息,其中使用到的claspath:表示resources目錄。

方式1:同時讀取兩個Configuration.class

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

方式2:@Import註解將一個Configuration.class導入到另外一個Configuration,主程序只要讀取總的Configuration.class

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

小結:核心本質還是去xml,將兩個配置文件合併在一起。

附:看一下@Import註解裏面,

在這裏插入圖片描述

4.1.4 @Scope註解

@Scope註解 用來改變spring中@Bean或的生命週期,略過。

4.2 第三方bean去xml化

@Enable 是模塊驅動註解,spring自帶很多@Enable,如下:
在這裏插入圖片描述
我們現在已經可以完成自己的bean管理,那麼對於第三方bean的管理怎麼辦?

在spring3.x,集成redis或mybatis步驟:

1、創建一個配置類服務於第三方組件
2、@Bean註解聲明一個bean配置類

@Bean
DefaultKaptcha DefaultKaptcha(){   }

3、@Enable啓動一個模塊,把第三方組件的整個bean自動裝配到IOC容器裏面,這就是模塊驅動

以使用Schedule定時器爲例,展示xml和@Enable註解兩種方式。

方式1:xml方法管理第三方Bean

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

方式2:@Enable管理第三方Bean

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

附1:xml如何實現定時器的

在AnnotationDrivenBeanDefinitionParser.java,這個是註解驅動bean定義的解析類,就是這個類實現定時器的。
在這裏插入圖片描述
附2:@EnableScheduling 註解如何實現定時器
進入@EnableScheduling註解

在這裏插入圖片描述

進入@Import({SchedulingConfiguration.class}) 指定類,這裏就是新建Scheduler註解解析的。
在這裏插入圖片描述

小結

所以,@EnableScheduling,這個註解表示完成Schedule模塊下bean的自動注入,啓動Schedule註解驅動。

有了@EnableXxx註解,要用到schedule,就將schedule相關的bean注入,要用到redis,就將redis相關的bean注入,不需要配置xml文件也可以完成,是spring3.x 完成去xml的另一個重要特性。

在spring裏面,官方提供的@Enable註解包括@EnableScheduling @EnableAsync @EnablewebMvc,實際上,我們還可以自己去實現、自定義自己的@EnableXxx註解。

五、Spring4.x(註解方式的完善)

5.1 @Conditional條件註解

@Conditional爲bean的裝載設置條件,條件不滿足,bean不會被裝載,條件滿足,bean纔會被裝載。

比如,在某一環境下不裝載,在某種條件下不裝載或已經裝載過就不再裝載。

注意,spring的註解和springboot的註解不一樣,springboot是在spring的基礎上做了擴展。

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述

附:@Conditional註解底層怎麼實現的
在這裏插入圖片描述

在這裏插入圖片描述

六、Spring5.x(註解性能上的優化)

@Indexed 用來提升性能的註解,略過。

七、小結

介紹了從Spring 1.x 到Spring 5.x ,整個註解發展過程,完。

天天打碼,天天進步!!!

工程文件地址:https://download.csdn.net/download/qq_36963950/12553609

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章