小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

SpringBoot 項(xiàng)目中常用的注解

 kangyongsun 2024-08-29 發(fā)布于廣東

目錄

一、Common 層(實(shí)體類)

二、Dao / Mapper 層(數(shù)據(jù)訪問層)

三、Service 層(業(yè)務(wù)邏輯層)

四、Controller 層(控制器層)

1、在類上使用的注解

2、在方法上使用的注解

3、在參數(shù)上使用的注解

4、異常處理器

五、Config 層 (配置類)

六、Interceptor 層 (攔截器)

七、Advice 層(切面層)

八、SpringBoot 啟動類上的注解


每一層對應(yīng)每個包,包名中應(yīng)全為小寫。

一、Common 層(實(shí)體類

前提:導(dǎo)入 Lombok 依賴

@Data:生成 get 和 set 方法以及 toString 方法

@Getter:只生成 get 方法,避免對類中的成員變量修改。

@EqualsAndHashCode(callSuper = false):重寫 equals 和 hashCode 方法

@AllArgsConstructor:生成全參的構(gòu)造方法

@NoArgsConstructor:生成無參的構(gòu)建方法

@Builder(access = AccessLevel.MODULE):實(shí)現(xiàn)不可變對象的創(chuàng)建,避免直接使用構(gòu)造函數(shù)初始化各個字段,并提供了一種鏈?zhǔn)秸{(diào)用的方式來設(shè)置對象屬性。

使用方法

以下是 mybtis - plus下的實(shí)體類字段常用注解

@TableId(value = "id", type = IdType.AUTO):標(biāo)識主鍵,可以根據(jù) value 來對應(yīng)表中字段名稱,type 為主鍵的自增

@TableField("PLATFORM_TYPE"):當(dāng)該注解的 value 值與表中的字段名稱一致時,在進(jìn)行 sql 編寫時就不需要再進(jìn)行別名處理了,會自動映射實(shí)體類的屬性名稱。

@TableField(exist = false):標(biāo)識該屬性在對應(yīng)的表中不存在,不會加入到 mybatis - plus 提供的自動生成的 sql 語句中。

以下是對實(shí)體類中存在的日期格式的類型的格式指定

@JsonFormat:將 Java 對象序列化為 JSON 格式時,日期類型字段的格式化方式。

@DateTimeFormat:用于將請求參數(shù)綁定到 Java 對象時,日期類型字段的格式化方式。

  1. //兩個注解可以連用
  2. @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") //后端 --> 前端
  3. @DateTimeFormat(pattern = "yyyy-MM-dd") //前端 -->后端
  4. private Date updateTime;

二、Dao / Mapper 層(數(shù)據(jù)訪問層)

@Repository:將數(shù)據(jù)庫訪問異常翻譯為 Spring 提供的統(tǒng)一的數(shù)據(jù)訪問異常類型,將類加入到 Spring 容器中。

@Mapper :將類加入到 Spring 容器中,告訴 MyBatis 框架對應(yīng)的接口是一個映射器接口,需要動態(tài)生成對應(yīng)的實(shí)現(xiàn)類。

@DS( DBConstants.DATASOURCE_GZZT_MYSQL):對于多數(shù)據(jù)源的項(xiàng)目用來指定數(shù)據(jù)源。

三、Service 層(業(yè)務(wù)邏輯層)

@Service:將類加入到 Spring 容器中。

@Autowired:根據(jù)類型在 Spring 容器中匹配相應(yīng)的Bean。

@Qualifier:如果存在多個匹配的Bean,可以用該注解指定一個來使用,與 @Autowired 連用。

@Resource:通過名稱進(jìn)行自動裝配。

@AutoWired和@Resource注解的區(qū)別如下:

  1. 注入方式:@Autowired是Spring提供的注解,通過類型進(jìn)行自動裝配;@Resource是JavaEE提供的注解,通過名稱進(jìn)行自動裝配。

  2. 匹配規(guī)則:@Autowired默認(rèn)按照類型進(jìn)行匹配,如果存在多個匹配的Bean,則可以通過@Qualifier注解指定具體的Bean;@Resource默認(rèn)按照名稱進(jìn)行匹配,如果存在多個匹配的Bean,則會根據(jù)容器的默認(rèn)規(guī)則進(jìn)行選擇。

  3. 擴(kuò)展性:@Autowired是Spring提供的注解,更加靈活,可以與其他Spring注解配合使用;@Resource是JavaEE提供的注解,不支持與其他注解的配合使用。

總的來說,@Autowired是Spring推薦使用的注解,更加靈活和強(qiáng)大,而@Resource是JavaEE提供的注解,更加符合JavaEE的規(guī)范。在實(shí)際使用中,可以根據(jù)具體的需求選擇合適的注解。

@Value("${effFileNameLocalDirPath}"):一般用來匹配配置文件中的屬性值。

@Transactional:可以添加在類和方法上,用來進(jìn)行事務(wù)管理。

@Slf4j:開啟日志,通過 log.info(),打印日志,在 Lombok 包下。

四、Controller 層(控制器層)

1、在類上使用的注解

@Controller:用于標(biāo)識控制器類,處理請求并返回視圖。

@RestController:用于標(biāo)識控制器類,處理請求并將響應(yīng)結(jié)果轉(zhuǎn)換為 JSON 或 XML 等格式。

@RequestMapping:可以在類級別或方法級別使用,用于指定請求URL的路徑。

@CrossOrigin:開啟跨域。

2、在方法上使用的注解

@RequestMapping:可以在類級別或方法級別使用,用于指定請求URL的路徑。 @GetMapping:簡化的@RequestMapping,符合 RESTful 風(fēng)格,用于處理GET請求,一般是對應(yīng)的查詢業(yè)務(wù)。

@PostMapping:用于處理POST請求,一般對應(yīng)添加業(yè)務(wù),如果頁面?zhèn)鬟f的參數(shù)為一個 JSON 對象,就必須使用 POST 請求,使用 GET 請求會報錯。

@PutMapping:用于處理PUT請求,一般對應(yīng)修改業(yè)務(wù)。

@DeleteMapping:用于處理DELETE請求,一般對應(yīng)刪除業(yè)務(wù)。

@ResponseBody:將方法的返回值封裝為 JSON 對象。

3、在參數(shù)上使用的注解
@GetMapping("one/{productId}")
public ResultData one(@PathVariable Integer productId)

URL:http://localhost:8080/order/one/1

@PathVariable:參數(shù)值對應(yīng)的是 URL 中傳遞的值。

public ResultData params(@RequestParam(defaultValue = "1") Integer page,
                         @RequestParam(defaultValue = "5") Integer size)

URL:http://localhost:8080/order/all?page=1&size=5

@RequstParam:參數(shù)值對應(yīng)的時 URL 中傳遞的參數(shù)值。

@RequestBody:將前端傳遞的請求體(JSON 格式)轉(zhuǎn)換為對應(yīng)的 Java 實(shí)體類。

4、異常處理器

@ExceptionHandler:用于處理控制器中出現(xiàn)的異常,可以針對特定的異常類型進(jìn)行處理。

@ControllerAdvice:結(jié)合 @ExceptionHandler 注解在一個類中定義全局異常處理器。

@RestControllerAdvice:將異常處理的結(jié)果封裝為 JSON 格式。

@Component:如果使用自定義的異常處理器,使用該注解將該類注入到 spring 容器中。

以下是自定義攔截器的實(shí)現(xiàn):

  1. @Component
  2. public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
  3. /**
  4. *
  5. * @param httpServletRequest request對象
  6. * @param httpServletResponse response對象
  7. * @param o 出現(xiàn)異常的Controller對象
  8. * @param e 異常
  9. * @return
  10. */
  11. @Override
  12. public ModelAndView resolveException(HttpServletRequest httpServletRequest,
  13. HttpServletResponse httpServletResponse,
  14. Object o,
  15. Exception e) {
  16. ?
  17. ModelAndView modelAndView = new ModelAndView();
  18. //1、可以通過異常的類型,來做出不同處理
  19. if(e instanceof LongException){
  20. modelAndView.setViewName("error");
  21. }else if(e instanceof OrderException){
  22. modelAndView.setViewName("error");
  23. }else if(e instanceof PayException){
  24. modelAndView.setViewName("error");
  25. }
  26. ?
  27. //2、前端分離項(xiàng)目。通過響應(yīng)流進(jìn)行進(jìn)行響應(yīng)
  28. httpServletResponse.getWriter().write(jsonStr);
  29. ?
  30. //打印異常信息
  31. e.printStackTrace();
  32. return modelAndView;
  33. }
  34. }

五、Config 層 (配置類)

@Configuration:用于標(biāo)識一個類為配置類,配置類中可以定義 Bean 的創(chuàng)建和依賴關(guān)系。

@Bean:用于定義一個 Bean 的配置信息并注入 Spring 容器中。通常用于 @Configuration 類中的方法上。

六、Interceptor 層 (攔截器)

@component:用于標(biāo)識一個類為Spring容器管理的組件(Bean),可以用于任何類。

攔截器類一般都是通過實(shí)現(xiàn) HandlerInterceptor 接口的三個方法來進(jìn)行請求的攔截。

  1. @Component
  2. public class LoginInterceptor implements HandlerInterceptor { //AOP
  3. @Override
  4. public boolean preHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler) throws Exception {
  5. System.out.println("進(jìn)入到Handler之前執(zhí)行【進(jìn)行攔截操作】");
  6. ?
  7. HttpSession session = request.getSession();
  8. Object loginUser = session.getAttribute("loginUser");
  9. if(loginUser == null){
  10. response.sendRedirect(request.getContextPath()+"/pages/login.jsp");
  11. return false;
  12. }
  13. return true; //是否放行 false表示不放行 true放行
  14. }
  15. ?
  16. @Override
  17. public void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  18. System.out.println("進(jìn)入到Handler之后執(zhí)行【進(jìn)行后續(xù)操作】");
  19. }
  20. ?
  21. @Override
  22. public void afterCompletion(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Object handler, Exception ex) throws Exception {
  23. System.out.println("當(dāng)請求成功之后數(shù)據(jù)渲染完成執(zhí)行【資源釋放】");
  24. }
  25. }

在完成攔截器的實(shí)現(xiàn)之后還需要將攔截器配置到 Web 的配置類中。

  1. @Configuration
  2. public class MyWebConfig implements WebMvcConfigurer {
  3. ?
  4. @Autowired
  5. //配置的攔截器類
  6. private LoginInterceptor loginInterceptor;
  7. ?
  8. //文件上傳配置
  9. //添加虛擬路徑,相同于通過一個路徑來訪問本地磁盤上的內(nèi)容
  10. @Override
  11. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  12. registry.addResourceHandler("/image/**")
  13. .addResourceLocations("file:D:\\upload\\");
  14. }
  15. ?
  16. ?
  17. @Override
  18. //跨域配置
  19. public void addCorsMappings(CorsRegistry registry) {
  20. registry.addMapping("/**") //請求的資源 /**表示所有資源 、
  21. .allowedOrigins("*") //允許指定的源能訪問
  22. .allowedHeaders("*") //允許攜帶的請求頭
  23. .allowedMethods("*"); //允許的請求方式
  24. //注意:當(dāng)設(shè)置允許攜帶Cookie不允許將指定源設(shè)置為所有
  25. }
  26. ?
  27. @Override
  28. //攔截器配置
  29. public void addInterceptors(InterceptorRegistry registry) {
  30. registry.addInterceptor(loginInterceptor) //添加攔截器類
  31. .excludePathPatterns("/")
  32. //.addPathPatterns("/**") //添加攔截的路徑
  33. .excludePathPatterns("/user/**"); //添加排除路徑
  34. }
  35. }

以上就完成了整個攔截器的實(shí)現(xiàn)。

攔截器(Interceptor)和過濾器(filter)之間的區(qū)別如下:

  1. 觸發(fā)時機(jī):攔截器是在請求處理的前后觸發(fā),可以對請求進(jìn)行預(yù)處理和后處理;而過濾器是在請求到達(dá)Servlet之前或響應(yīng)返回客戶端之前觸發(fā)。

  2. 對象范圍:攔截器是針對Handler(Controller)級別的,它只能攔截處理器方法的調(diào)用;而過濾器是對Servlet容器級別的,它可以攔截整個請求響應(yīng)鏈。

  3. 依賴關(guān)系:攔截器依賴于Servlet容器,例如Spring MVC中的DispatcherServlet;而過濾器是獨(dú)立于Servlet容器的,可以在任何符合Servlet規(guī)范的容器中使用。

  4. 功能定位:攔截器主要用于業(yè)務(wù)邏輯的處理,可以在請求前或請求后進(jìn)行處理、日志記錄、權(quán)限校驗(yàn)等;而過濾器主要用于請求過濾,可以對請求和響應(yīng)進(jìn)行過濾、處理編碼、安全驗(yàn)證等。

七、Advice 層(切面層)

@Aspect:標(biāo)識該類為一個切面類。

@Component:用于掃描指定包下的組件,將其注冊為Spring的Bean。

@PointCut:切入點(diǎn),表示在應(yīng)用程序中可以被攔截到的具體的點(diǎn),比如方法調(diào)用、異常拋出等。

@Before:前置通知。

@After:最終通知。

@AfterRerurning:后置通知。

@AfterThrowing:異常通知。

@Around:環(huán)繞通知。

綜合使用可以通過 Spring 的切面編程在開發(fā)中的使用-CSDN博客 案例實(shí)現(xiàn)。

以下是對五種通知方式的解釋:

  1. /**
  2. execution 表達(dá)式的使用
  3. *:表示任意 ..:表示任意參數(shù)
  4. 完整表示:public void com.service.impl.UserServiceImpl.addUser();
  5. 以下是省略表述:
  6. void com.service.impl.UserServiceImpl.addUser();
  7. * com.service.impl.UserServiceImpl.addUser(..);
  8. * com.service.*.*Impl.*(..)
  9. */
  10. @Before("execution(* com.service.*.*Impl.*())")
  11. public void before(){
  12. System.out.println("前置通知,在目標(biāo)方法執(zhí)行之前就執(zhí)行(相當(dāng)于開啟事務(wù))注解");
  13. }
  14. @After("execution(* com.service.*.*Impl.*())")
  15. public void after(){
  16. System.out.println("最終通知,在目標(biāo)方法執(zhí)行之后執(zhí)行(相當(dāng)于finally 無論異常與否都會返回)注解");
  17. }
  18. @AfterReturning("execution(* com.service.*.*Impl.*())")
  19. public void afterReturning(){
  20. System.out.println("后置通知,在目標(biāo)方法返回返回值之后執(zhí)行(相當(dāng)于關(guān)閉事務(wù))注解");
  21. }
  22. @AfterThrowing("execution(* com.service.*.*Impl.*())")
  23. public void afterThrowing(){
  24. System.out.println("異常通知,在目標(biāo)方法中出現(xiàn)異常是執(zhí)行(相當(dāng)于回滾事務(wù))注解");
  25. }
  26. @Around("execution(* com.service.*.*Impl.*())")
  27. public Object around(ProceedingJoinPoint joinPoint){
  28. Object obj=null;
  29. try{
  30. System.out.println("前置通知,在目標(biāo)方法執(zhí)行之前就執(zhí)行(相當(dāng)于開啟事務(wù))注解");
  31. //調(diào)用proceed()方法可以繼續(xù)執(zhí)行被增強(qiáng)的方法。
  32. obj=joinPoint.proceed();
  33. System.out.println("后置通知,在目標(biāo)方法返回返回值之后執(zhí)行(相當(dāng)于關(guān)閉事務(wù))注解");
  34. } catch (Throwable e) {
  35. System.out.println("異常通知,在目標(biāo)方法中出現(xiàn)異常是執(zhí)行(相當(dāng)于回滾事務(wù))注解");
  36. throw new RuntimeException(e);
  37. }finally {
  38. System.out.println("最終通知,在目標(biāo)方法執(zhí)行之后執(zhí)行(相當(dāng)于finally 無論異常與否都會返回)注解");
  39. }
  40. return obj;
  41. }

八、SpringBoot 啟動類上的注解

@SpringBootApplication:用于標(biāo)注主類,表示這是一個Spring Boot應(yīng)用程序的入口類,同時也包含了 @EnableAutoConfiguration 和 @ComponentScan 注解。

@ComponentScan:用于掃描指定包下的組件,將其注冊為Spring的Bean。

@EnableAutoConfiguration:用于自動配置Spring應(yīng)用程序,根據(jù)類路徑下的依賴自動配置Bean。

@MapperScan:指定 MyBatis Mapper 接口所在的包,Spring 在啟動時會掃描指定的包路徑,并注冊這些 Mapper 接口的實(shí)現(xiàn)類作為 Bean。

@EnableScheduling:用于開啟定時任務(wù)的支持。

當(dāng)開啟定時任務(wù)時在對應(yīng)的方法上添加 @Scheduled 注解可以將該方法設(shè)置為一個定時任務(wù)。

@Scheduled(cron = "0 */5 * * * ?"):標(biāo)識該方法為一個定時任務(wù),通過 cron 參數(shù)來指定什么時候執(zhí)行。

關(guān)于@Scheduled的參數(shù)配置可以參考SpringBoot 項(xiàng)目定時任務(wù)的啟動和@Scheduled注解中的cron參數(shù)的設(shè)置原則-CSDN博客

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多