《JavaEE開發(fā)的顛覆者:Spring Boot實戰(zhàn)》 2016年版讀書筆記
第一章 Spring概述
1.Spring的配置發(fā)展:
- xml配置
- 注解配置帕识,基本配置用xml,業(yè)務配置用注解
- Java配置沙咏,Spring4.x推薦使用币旧,@Configuration注解生命配置類践险,@ComponentScan自動掃描使用注解聲明的類并將其注冊為bean
2.推薦安裝SpringIDE插件進行基于Spring的開發(fā)。
3.依賴注入DI指的是由容器負責創(chuàng)建對象和維護對象之間的依賴關系吹菱,控制反轉IOC是通過依賴注入實現(xiàn)的巍虫。
4.聲明bean的注解:
- @Component:沒有明確的角色
- @Service:業(yè)務邏輯層使用
- @Repository:數(shù)據(jù)訪問層使用
- @Controller:展現(xiàn)層使用
5.注入bean的注解:
- @Autowired:Spring提供
- @Inject:JSR-330提供
- @Resource:JSR-250提供
可以注解在屬性或者set方法上,推薦注解在屬性上鳍刷。
6.java配置是Spring4.x推薦的配置方式占遥,通過@Configuration(聲明為配置類)和@Bean(注解在方法上,聲明返回的是一個bean)實現(xiàn)倾剿。推薦的配置方式:全局配置使用java配置筷频,業(yè)務配置使用注解配置蚌成。
7.AOP面向切面編程,支持AspectJ注解凛捏,常用的注解有:
- @Aspect:定義切面
- @After担忧、@Before、@Around定義建言advice坯癣,可以直接將攔截規(guī)則(切點)作為參數(shù)
- @PointCut專門定義攔截規(guī)則(切點)
第二章 Spring常用配置
1.@Scope注解定義bean的作用域:
- Singleton:單例模式瓶盛,默認配置
- Prototype:每次調用新建bean實例
- Request:web項目中每一個http request新建一個bean
- Session:web項目中沒一個http session新建一個bean
- GlobalSession:僅在portal應用中有用,每個globl http session新建一個bean
2.使用@Value注入屬性的不同值示罗,支持EL表達式
- @Value("Gunner"):注入普通值
- @Value("#{systemProperties['os.name']}"):注入系統(tǒng)變量
- @Value("#{T(java.lang.Math).random()*100.0}"):注入表達式值
- @Value("#{demoService.another}"):注入其他bean的屬性
- @Value("classpath:com/conanswp/config/config.txt"):注入文件資源,注解于Resource屬性上
- @Value("http://www.gunner.com"):注解網(wǎng)址資源惩猫,注解于Resource屬性上
- @Value("${book.name}"):注解配置文件,需要使用@PropertySource在該類上指定文件地址蚜点,然后使用@Bean注解得到一個PropertySourcesPlaceholderConfigurer的bean
3.bean的創(chuàng)建和銷毀前后可以執(zhí)行一定的操作轧房,使用注解如下:
- Java配置方式:使用@Bean的initMethod和destroyMethod
- 注解方式:使用JSR-250的@PostConstruct和@PreDestroy
4.profile為在不同環(huán)境下使用不同的配置,方法如下:
- 設定Environment的ActiveProfiles來指定context使用的配置環(huán)境绍绘,可以使用@Profile注解類或者方法奶镶,達到不同情況下選擇實例化不同的Bean
- 設定jvm的spring.profiles.active參數(shù)類設置配置環(huán)境
- web項目設置在Servlet的context參數(shù)中
5.Spring事件用于支持bean之間的消息通信
- 自定義事件,繼承ApplicationEvent
- 定義事件監(jiān)聽器,實現(xiàn)ApplicationListener
- 使用容器ApplicatioonContext發(fā)布事件
第三章 Spring高級話題
1.Spring Aware可以讓bean獲取Spring容器的服務陪拘。
- 實現(xiàn)BeanNameAware:可以獲取bean名稱
- 實現(xiàn)ResourceLoaderAware:獲取資源加載器
2.Spring通過TaskExecutor實現(xiàn)多線程和并發(fā)編程厂镇。使用ThreadPoolTaskExecutor實現(xiàn)基于線程池的TaskEcecutor。使用@EnableAsync開啟對異步任務的支持左刽,使用@Async注解聲明方法是一個異步任務捺信。
3.@EnableScheduling開啟計劃任務支持(在config類上使用),然后在方法上通過@Scheduled聲明計劃任務方法欠痴。@Scheduled支持cron迄靠,fixDelay,fixRate等斋否。
4.@Conditional根據(jù)滿足特定條件創(chuàng)建特定的bean梨水。
5.支持新增注解組合已有注解的功能。
第四章 Spring MVC基礎
1.通過實現(xiàn)WebApplicationInitializer接口可以不使用web.xml配置文件茵臭。
2.Spring MVC常用注解
- @Controller:聲明為控制器bean疫诽,自動被DispatcherServlet掃描,并將web請求映射到注解了@RequestMapping的方法上旦委。
- @RequestMapping:映射web請求(訪問路徑和參數(shù))奇徒,處理類和方法∮酰可以注解在類和方法上摩钙,注解在方法上時路徑會繼承注解在類上的路徑。
- @ResponseBody:支持將返回值放到response體內而不是返回一個頁面查辩。
- @RequestBody:允許request參數(shù)在request體內而不是鏈接在地址后面胖笛。
- @PathVariable:用來接收路徑參數(shù)网持。
- @RestController:組合注解了@Controller和@ResponseBody,用于定義與頁面交互數(shù)據(jù)的控制器长踊。
3.Spring MVC通過繼承WebMvcConfigurerAdapter類并在配置類使用@EnableWebMvc來定制配置功舀,如添加靜態(tài)文件目錄等。
- addResourceHandlers:用于添加靜態(tài)資源
- 實現(xiàn)HanlderInterceptor或者繼承HandlerInterceptorAdapter類實現(xiàn)自定義攔截器身弊。然后使用addInterceptors注冊自定義的攔截器辟汰。
- @ControllerAdvice處理控制器全局配置,如@ExceptionHandler處理全局異常阱佛,@InitBinder設置WebDataBinder自動綁定前臺請求參數(shù)到后臺Model中帖汞,@ModelAttribute讓全局的@RequestMapping能獲得此處設置的鍵值對。
4.高級配置
- MultipartReaolver處理上傳文件
- HttpMessageConcerter處理請求和響應的數(shù)據(jù)轉換格式
- 服務器推送技術:SSE和Servlet3.0+異步方法處理凑术。此外翩蘸,瀏覽器和服務器之間可以使用WebSocket進行雙向通信