文章目錄
一、前言
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