SpringBoot註解
-
@SpringBootApplication
包含了@ComponentScan
、@Configuration
和@EnableAutoConfiguration
註解Configuration
註解通常與@Bean
一起使用,使用這兩個註解可以創建一個簡單的Spring配置類,替代Xml配置,也可以使用@ImportResource
註解加載xml配置文件-
@EnableAutoConfiguration
這個註解告訴Spring Boot根據添加的jar依賴猜測你想如何配置Spring,由於 spring-boot-starter-web 添加了Tomcat和Spring MVC,所以auto-configuration將假定你正在開發一個web應用並相應地對Spring進行設置。Starter POMs和Auto-Configuration:設計auto-configuration的目的是更好的使用”Starter POMs”,但這兩個概念沒有直接的聯繫。你可以自由地挑選starter POMs以外的jar依賴,並且Spring Boot將仍舊盡最大努力去自動配置你的應用。參考spring.factories
@ComponentScan
註解 見下文 Bean 聲明註解
-
@Value
獲取application.properties配置的屬性的值
Bean 聲明註解
@Service
業務邏輯層@Component
組件(不容易歸類可以使用該組件)@Repository
數據訪問層@Controller
Spring mvc 展現層@Configurable
聲明當前類是一個配置類@ComponentScan("com.yss.ms")
設置自動掃描包下面所有的 (@Service @Component @Repository @Controller
) 使用springboot開發時候,啓動類會隱式的指定了掃描時basePackage的路徑,參考@SpringBootApplication@EnableAsync
開啓異步任務支持@PropertySource("classpath:application.properties")
用於指定目錄,指定編碼讀取properties文件@EnableScheduling
註解開啓對計劃任務的支持
Bean 注入註解
@Autowired
Spring 提供 等同autowire=byType,根據類型的自動注入依賴@Qualifier
Spring 提供 等同autowire=byName,當@Autowired
註解需要判斷多個 bean類型相同時,就需
要使用@Qualifier(“xxBean”)
來指定依賴的bean的id@Resource
屬於JSR-250標準 作用同@Autowired
,是屬於byName類 型的依賴注入,使用方式:@Resource(name=”xxBean”)
,不帶參數是默 認類名首字母小寫@Value("xxxx")
注入普通字符串@Value("${xxx.xxx}")
注入配置文件中字符串@PostConstruct
標註在方法上,在構造函數執行完畢後執行@PreDestroy
標註在方法上,銷燬前執行@Async
異步方法表明,若是在class上則全是@Scheduled
聲明方法是計劃任務@Conditional()
條件註解,當滿足某條件時
Spring MCV
@RequestMapping
用於映射Web請求 返回體,編碼格式都可以在此處設置
produces = {} 設置返回值json/xml charset 等
@RestControlle
組合註解,組合了@Controller和@ResponseBody@ResponseBody
將Controller的方法返回的對象通過適當的轉換(通過配置可以返回Json或XML數據),寫入
response對象的body數據區@RequestBody
用於讀取request請求的body部分數據(Json串或XML數據),將其轉化爲需要的對象@PathVariable
用來接收路徑參數,api/{id}
JUnit4 註解
@After
如果在@Before
註解方法中分配了額外的資源,那麼在測試執行完後,需要釋放分配的資源,使用@After
註解一個public void方法會使該方法在@Test
註解方法執行後被執行AfterClass
如果在@BeforeClass
註解方法中分配了代價高昂的額外的資源,那麼在測試類中的所有測試方法執行完後,需要釋放分配的資源,使用@AfterClass
註解一個public static void方法會使該方法在測試類中的所有測試方法執行完後被執行@Before
使用@Before
註解一個public void 方法會使該方法在@Test
註解方法被執行前執行@BeforeClass
使用@BeforeClass
註解一個public static void 方法,並且該方法不帶任何參數,會使該方法在所有測試方法被執行前執行一次,並且只執行一次@Ignore
對包含測試類的類或@Test
註解方法使用@Ignore
註解將使被註解的類或方法不會被當做測試執行@Test
@Test
註解的public void方法將會被當做測試用例,JUnit每次都會創建一個新的測試實例,然後調用@Test
註解方法@RunWith
指定測試類使用某個運行器,如:@RunWith(SpringRunner.class)
Controller 相關注解
@Controller
控制器,處理http請求。
@RestController 複合註解
查看@RestController源碼
源碼我們知道,@RestController註解相當於@ResponseBody+@Controller合在一起的作用,RestController使用的效果是將方法返回的對象直接在瀏覽器上展示成json格式.
@RequestBody
通過HttpMessageConverter讀取Request Body並反序列化爲Object(泛指)對象
@RequestMapping
@RequestMapping 是 Spring Web 應用程序中最常被用到的註解之一。這個註解會將 HTTP 請求映射到 MVC 和 REST 控制器的處理方法上
@GetMapping用於將HTTP get請求映射到特定處理程序的方法註解
註解簡寫:@RequestMapping(value = "/say",method = RequestMethod.GET)等價於:@GetMapping(value = "/say")
GetMapping源碼
是@RequestMapping(method = RequestMethod.GET)的縮寫
@PostMapping用於將HTTP post請求映射到特定處理程序的方法註解
是@RequestMapping(method = RequestMethod.POST)的縮寫
三、取請求參數值
@PathVariable:獲取url中的數據
請求示例:http://localhost:8080/User/getUser/123
@RequestParam:獲取請求參數的值
@Controller
@RequestMapping("/User")
public class HelloWorldController {
}
請求示例:http://localhost:8080/User/getUser?uid=123
@RequestHeader 把Request請求header部分的值綁定到方法的參數上
@CookieValue 把Request header中關於cookie的值綁定到方法的參數上
四、注入bean相關
@Repository
DAO層註解,DAO層中接口繼承JpaRepository<T,ID extends Serializable>,需要在build.gradle中引入相關jpa的一個jar自動加載。
@Service
- @Service是@Component註解的一個特例,作用在類上
- @Service註解作用域默認爲單例
- 使用註解配置和類路徑掃描時,被@Service註解標註的類會被Spring掃描並註冊爲Bean
- @Service用於標註服務層組件,表示定義一個bean
- @Service使用時沒有傳參數,Bean名稱默認爲當前類的類名,首字母小寫
- @Service(“serviceBeanId”)或@Service(value=”serviceBeanId”)使用時傳參數,使用value作爲Bean名字
@Scope作用域註解
@Scope作用在類上和方法上,用來配置 spring bean 的作用域,它標識 bean 的作用域
@Entity實體類註解
@Table(name ="數據庫表名"),這個註解也註釋在實體類上,對應數據庫中相應的表。
@Id、@Column註解用於標註實體類中的字段,pk字段標註爲@Id,其餘@Column。
@Bean產生一個bean的方法
@Bean明確地指示了一種方法,產生一個bean的方法,並且交給Spring容器管理。支持別名@Bean("xx-name")
@Autowired 自動導入
- @Autowired註解作用在構造函數、方法、方法參數、類字段以及註解上
- @Autowired註解可以實現Bean的自動注入
@Component
把普通pojo實例化到spring容器中,相當於配置文件中的
雖然有了@Autowired,但是我們還是要寫一堆bean的配置文件,相當麻煩,而@Component就是告訴spring,我是pojo類,把我註冊到容器中吧,spring會自動提取相關信息。那麼我們就不用寫麻煩的xml配置文件了
五、導入配置文件
@PropertySource註解
引入單個properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties"})
引入多個properties文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})
@ImportResource導入xml配置文件
可以額外分爲兩種模式 相對路徑classpath,絕對路徑(真實路徑)file
注意:單文件可以不寫value或locations,value和locations都可用
相對路徑(classpath)
-
引入單個xml配置文件:@ImportSource("classpath : xxx/xxxx.xml")
-
引入多個xml配置文件:@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})
絕對路徑(file)
-
引入單個xml配置文件:@ImportSource(locations= {"file : d:/hellxz/dubbo.xml"})
-
引入多個xml配置文件:@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})
取值:使用@Value註解取配置文件中的值
@Value("${properties中的鍵}")
private String xxx;
@Import 導入額外的配置信息
功能類似XML配置的,用來導入配置類,可以導入帶有@Configuration註解的配置類或實現了ImportSelector/ImportBeanDefinitionRegistrar。
使用示例
六、事務註解 @Transactional
在Spring中,事務有兩種實現方式,分別是編程式事務管理和聲明式事務管理兩種方式
- 編程式事務管理: 編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於編程式事務管理,spring推薦使用TransactionTemplate。
- 聲明式事務管理: 建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務,通過@Transactional就可以進行事務操作,更快捷而且簡單。推薦使用
七、全局異常處理
@ControllerAdvice 統一處理異常
@ControllerAdvice 註解定義全局異常處理類
@ExceptionHandler 註解聲明異常處理方法