黑莲技术资源论坛

作者: 123456790
查看: 65|回复: 0

Spring Boot 這麼火,常用注解和原理都給你整理好了

Spring Boot 這麼火,常用注解和原理都給你整理好了

[复制链接]
123456790 | 显示全部楼层 发表于: 2022-8-6 07:20:43
123456790 发表于: 2022-8-6 07:20:43 | 显示全部楼层 |阅读模式
查看: 65|回复: 0
作者:雲天 鏈接︰https://www.cnblogs.com/tqlin/p/11687811.html
一、啟動注解 @SpringBootApplication



查看源碼可發現,@SpringBootApplication是一個復合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration`,@ComponentScan`這三個注解

``@SpringBootConfiguration注解,繼承@Configuration注解,主要用于加載配置文件@SpringBootConfiguration繼承自@Configuration`,二者功能也一致,標注當前類是配置類, 並會將當前類內聲明的一個或多個以@Bean注解標記的方法的實例納入到spring容器中,並且實例名就是方法名。

@EnableAutoConfiguration 注解,開啟自動配置功能@EnableAutoConfiguration可以幫助SpringBoot應用將所有符合條件的@Configuration配置都加載到當前SpringBoot創建並使用的IoC容器。借助于Spring框架原有的一個工具類︰SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自動配置功效才得以大功告成

@ComponentScan 注解,主要用于組件掃描和自動裝配@ComponentScan的功能其實就是自動掃描並加載符合條件的組件或bean定義,最終將這些bean定義加載到容器中。我們可以通過basePackages等屬性指定@ComponentScan自動掃描的範圍,如果不指定,則默認Spring框架實現從聲明@ComponentScan所在類的package進行掃描,默認情況下是不指定的,所以SpringBoot的啟動類最好放在root package下。

二、Controller 相關注解

@Controller

控制器,處理http請求。

@RestController 復合注解

查看@RestController源碼
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController {  @AliasFor(annotation = Controller.class) String value() default "";}
從源碼我們知道,@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源碼
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@RequestMapping(method = RequestMethod.GET)public @interface GetMapping {}
是@RequestMapping(method = RequestMethod.GET)的縮寫

@PostMapping用于將HTTP post請求映射到特定處理程序的方法注解
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@RequestMapping(method = RequestMethod.POST)public @interface PostMapping { }
是@RequestMapping(method = RequestMethod.POST)的縮寫

三、取請求參數值

@PathVariable:獲取url中的數據
@Controller@RequestMapping("/User")public class HelloWorldController { @RequestMapping("/getUser/{uid}") public String getUser(@PathVariable("uid")Integer id, Model model) { System.out.println("id:"+id); return "user"; }}
請求示例︰http://localhost:8080/User/getUser/123

@RequestParam:獲取請求參數的值
@Controller@RequestMapping("/User")public class HelloWorldController {@RequestMapping("/getUser")public String getUser(@RequestParam("uid")Integer id, Model model) { System.out.println("id:"+id); return "user";}}
請求示例︰http://localhost:8080/User/getUser?uid=123

四、注入bean相關

@Repository DAO層注解,DAO層中接口繼承JpaRepository<T,ID extends Serializable>,需要在build.gradle中引入相關jpa的一個jar自動加載。

Repository注解源碼



@Service是@Component注解的一個特例,作用在類上 @Service注解作用域默認為單例 使用注解配置和類路徑掃描時,被@Service注解標注的類會被Spring掃描並注冊為Bean @Service用于標注服務層組件,表示定義一個bean @Service使用時沒有傳參數,Bean名稱默認為當前類的類名,首字母小寫 @Service(“serviceBeanId”)或@Service(value=”serviceBeanId”)使用時傳參數,使用value作為Bean名字 @Scope作用域注解 @Scope作用在類上和方法上,用來配置 spring bean 的作用域,它標識 bean 的作用域

@Scope源碼
@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Scope {  @AliasFor("scopeName") String value() default ""; @AliasFor("value") String scopeName() default ""; ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;}
屬性介紹

value
    singleton 表示該bean是單例的。(默認)prototype 表示該bean是多例的,即每次使用該bean時都會新建一個對象。request 在一次http請求中,一個bean對應一個實例。session 在一個httpSession中,一個bean對應一個實例。

proxyMode
    DEFAULT 不使用代理。(默認)NO 不使用代理,等價于DEFAULT。INTERFACES 使用基于接口的代理(jdk dynamic proxy)。TARGET_CLASS 使用基于類的代理(cglib)。

@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。

使用示例
@SpringBootApplication@Import({SmsConfig.class})public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}
六、事務注解 @Transactional

在Spring中,事務有兩種實現方式,分別是編程式事務管理和聲明式事務管理兩種方式

編程式事務管理︰編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對于編程式事務管理,spring推薦使用TransactionTemplate。聲明式事務管理︰建立在AOP之上的。其本質是對方法前後進行攔截,然後在目標方法開始之前創建或者加入一個事務,在執行完目標方法之後根據執行情況提交或者回滾事務,通過@Transactional就可以進行事務操作,更快捷而且簡單。推薦使用

七、全局異常處理
    @ControllerAdvice 統一處理異常@ControllerAdvice 注解定義全局異常處理類
@ControllerAdvicepublic class GlobalExceptionHandler {}@ExceptionHandler 注解聲明異常處理方法@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(Exception.class) @ResponseBody String handleException(){ return "Exception Deal!"; }}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|小黑屋|黑莲技术资源论坛 ( 闽ICP备18016623号-7 )|网站地图

GMT+8, 2022-8-19 04:04 , Processed in 0.613015 second(s), 26 queries .

Powered by BBS.HL1.NET X3.4 © 2020-2022

本站IT社区(bbs.hl1.net)所有的资源教程均来自网友分享及互联网收集

快速回复 返回顶部 返回列表