天天看點

Spring學習筆記——Spring常用注解Spring常用注解

Spring學習筆記

  • Spring常用注解
    • 聲明bean的注解
    • 注入bean的注解
    • java配置類相關注解
    • 切面(AOP)相關注解
    • @Bean的屬性支援
    • @Value注解
    • 環境切換
    • 異步相關
    • 定時任務相關
    • @Enable*注解說明
    • 測試相關注解
    • SpringMVC相關注解

Spring常用注解

聲明bean的注解

  • @Component:元件,沒有明确的角色
  • @Service:在業務邏輯層使用(service層)
  • @Repository:在資料通路層使用(dao層)
  • @Controller:在展現層使用,控制器的聲明(C)

注入bean的注解

  • @Autowired:由Spring提供
  • @Inject:由JSR-330提供
  • @Resource:由JSR-250提供
  • 都可以注解在set方法和屬性上,推薦注解在屬性上(一目了然,少寫代碼)

java配置類相關注解

  • @Configuration:聲明目前類為配置類,相當于xml形式的Spring配置(類上),其中内部組合了@Component注解,表明這個類是一個bean
  • @Bean:注解在方法上,聲明目前方法的傳回值為一個bean,替代xml中的方式(方法上)
  • @ComponentScan:用于對component進行掃描
  • @WishlyConfiguration:為@Configuration與@ComponentScan的組合注解,可以替代這兩個注解

切面(AOP)相關注解

Spring支援AspectJ的注解式切面程式設計

  • @AspectJ:聲明一個切面(類上)

使用@After、@Before、@Around定義建言(advice),可直接将攔截規則(切點)作為參數

  • @After:在方法執行之後執行(方法上)
  • @Before:在方法執行之前執行(方法上)
  • @Around:在方法執行之前和之後執行(方法上)
  • @PointCut:聲明切點

在java配置類中使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ代理的支援(類上)

@Bean的屬性支援

  • @Scope:設定Spring容器如何建立Bean執行個體(方法上得有@Bean),其設定類型包括:
    • Singleton(單例,一個Spring容器中隻有一個bean執行個體,預設模式)
    • Protetype(每次調用建立一個bean)
    • Request(web項目中,給每個http request建立一個bean)
    • Session(web項目中,給每個http session建立一個bean)
    • GlobalSession(給每一個global http session建立一個bean執行個體)
  • @StepScope:在Sping Batch中才有涉及

Spring batch是用來處理大量資料操作的一個架構,主要用來讀取大量資料,然後進行一定處理後輸出成指定的形式。

Spring batch主要有以下部分組成:

  • JobRepository    用來注冊job的容器
  • JobLauncher 用來啟動Job的接口
  • Job 實際執行的任務,包含一個或多個Step
  • Step step包含ItemReader、ItemProcessor和ItemWriter
  • ItemReader 用來讀取資料的接口
  • ItemProcessor 用來處理資料的接口
  • ItemWriter 用來輸出資料的接口

以上Spring Batch的主要組成部分隻需要注冊成Spring的Bean即可。若想開啟批處理的支援還需在配置類上使用@EnableBatchProcessing,在Spring Batch中提供了大量的ItemReader和ItemWriter的實作,用來讀取不同的資料來源,資料的處理和校驗都要通過ItemProcessor接口實作來完成。

Spring Boot的支援

Spring Boot對Spring Batch支援的源碼位于org.springframework.boot.autoconfigure.batch下。

Spring Boot為我們自動初始化了Spring Batch存儲批處理記錄的資料庫。

spring batch會自動加載hsqldb驅動,根據需求選擇去留。

摘抄自Spring batch的學習:https://www.cnblogs.com/kevin443/p/6753703.html

  • @PostConstruct:由JSR-250提供,在構造函數執行完之後執行,等價于xml配置檔案中bean 的initMethod
  • @PreDestory:由JSR-250提供,在bean銷毀之前執行,等價于xml配置檔案中bean的destroyMethod

@Value注解

@Value為屬性注入值(屬性上),支援如下方式的注入:

// 注入普通的字元	
@Value("Michael Jackson") 
String name;
// 注入作業系統屬性 	
@Value("#{systemProperties['os.name']}")
String osName;
// 注入表達式結果 	
@Value("#{T(java.lang.Math).random()*100}")
String randomNumber;
// 注入其他bean的屬性	
@Value("#{domeClass.name}")
String name;
// 注入檔案資源	
@Value("calsspath:com/hgs/hello/test.txt")
Resource file;
// 注入網站資源	
@Value("http://www.javastack.cn")
Resource url;
// 注入配置檔案屬性	 
@Value("${book.name}")
String bookName;
           
  • 注入配置使用方法:
    • ①編寫配置檔案test.properties:book.name=《三體》
    • ②@PropertySource加載配置檔案(類上):@PropertySource(“classpath:com/hgs/hello/test/test.properties”)
    • ③還需要配置一個PropertySourcesPlaceholderConfigurer的bean

環境切換

  • @Profile:通過設定Environment的ActiveProfiles來設定目前context需要使用的配置環境
  • @Conditional:Spring4中可以使用此注解定義條件化的bean,通過實作Condition接口,并重寫matches方法,進而決定該bean是否被執行個體化(方法上)

異步相關

  • @EnableAsync:配置類中,通過此注解開啟對異步任務的支援,叙事性AsyncConfigurer接口(類上)
  • @Async:在實際執行的bean方法使用該注解來聲明其是一個異步任務(方法上或類上所有的方法都将異步,需要@EnableAsync開啟異步任務)

定時任務相關

  • @EnableScheduling:在配置類上使用,開啟計劃任務的支援(類上)
  • @Scheduled:來申明這是一個任務,包括cron、fixDelay、fixRate等類型(方法上,需要開啟計劃任務的支援)

@Enable*注解說明

這些注解主要用來開啟對xxx的支援

  • @EnableAspectJAutoProxy:開啟對AspectJ自動代理的支援
  • @EnableAsync:開啟異步方法的支援
  • @EnableScheduling:開啟計劃任務的支援
  • @EnableWebMvc:開啟Web MVC的配置支援
  • @EnableConfigurationProperties:開啟對@ConfigurationProperties注解配置Bean的支援
  • @EnableJpaRepositories:開啟對SpringData JPA Repository的支援
  • @EnableTransactionManagement:開啟注解式事務的支援
  • @EnableCaching:開啟注解式的緩存支援

測試相關注解

  • @RunWith:運作器,Spring中通常用于對JUint的支援
  • @RunWith(SpringJUint4ClassRunner.class)
  • @ContextConfiguration:用來加載配置ApplicationContext,其中classes屬性用來加載配置類,例如:

SpringMVC相關注解

  • @EnableWebMvc:在配置類中開啟WebMVC的配置支援,如一些ViewResolver或者MessageConverter等,若無此句,重寫WebMvcConfigurerAdapter方法(用于對SpringMVC的配置)
  • @Controller:聲明該類為SpringMVC中的Controller
  • @ResquestMapping:用于映射Web請求,包括通路路徑和參數(類和方法上)
  • @ResponseBody:支援将傳回值放在response内,而不是一個頁面,通常用于傳回json資料(傳回值旁或方法上)
  • @PathVariable:用于接收路徑參數,比如@RequestMapping("/hello/{name}")聲明的路徑,将注解放在參數前,即可擷取該值,通常作為Restful接口實作方法
  • @RestController:該注解為一個組合注解,相當于@Controller和@ResponseBody的組合,注解在類上,意味着,該Controller的所有方法都預設加上了@ResponseBody
  • @CoontrollerAdvice:通過該注解,我們可以将對于控制器的全局配置放置在同一個位置,注解了@Controller的類的方法可以使用@ExceptionHanler、@InitBinder、@ModelAttribute注解到方法上,這對所有注解了@ResquestMapping的控制器内的方法有效。
  • @ExceptionHandler:用于全局處理控制器裡的異常
  • @InitBinder:用來設定WebDataBinder,WebDataBinder用來自動綁定前台請求參數到Model中。
  • @ModelAttribute:本來的作用是綁定鍵值對到Model裡,在@ControllerAdvice中是讓全局的@RequestMapping都能擷取在此處設定的鍵值對。

繼續閱讀