springBoot項(xiàng)目相關(guān)注解

springBoot項(xiàng)目相關(guān)注解

spring相關(guān)注解

  1. IoC相關(guān)注解

     @Component: 類似于<bean>, 沒有實(shí)際業(yè)務(wù)含義
     @Repository: 是@Component的子注解, 功能和@Component完全一樣, 但是有業(yè)務(wù)含義, 使用該注解描述的代碼表示數(shù)據(jù)訪問對象, 俗稱DAO.
     @Service: 是@Component的子注解, 功能和@Component完全一樣, 但是有業(yè)務(wù)含義, 使用該注解描述的代碼表示服務(wù)對象, 俗稱Service.
     @Controller: 是@Component的子注解, 功能和@Component完全一樣, 但是有業(yè)務(wù)含義, 使用該注解描述的代碼表示控制器對象, 俗稱Controller.
     @Scope: 類似于<bean>中的scope屬性. 取值有: singleton, prototype, request, session, global session, application.
    
  2. DI相關(guān)注解

     @AutoWired: 是spring提供的注解, 默認(rèn)先按類型進(jìn)行注入, 如果找到則注入, 找不到再按照名稱進(jìn)行注入; 如果找到多個(gè)匹配的類型, 拋出異常.
    
     @Resource: 是javax.annotation包中提供的注解, 默認(rèn)先按照名稱注入, 名稱一致則注入, 如果沒有同名的, 再按照類型注入.
     
     @Value: 用于讀取properties資源文件中的數(shù)據(jù), 并為其描述的屬性賦值.
    
  3. 切面(AOP)相關(guān)注解

     @Aspect 聲明一個(gè)切面
     @After 在方法執(zhí)行之后執(zhí)行(方法上)
     @Before 在方法執(zhí)行之前執(zhí)行(方法上)
     @Around 在方法執(zhí)行之前與之后執(zhí)行(方法上)
     @PointCut 聲明切點(diǎn)
    
  4. @Bean注解(相當(dāng)于xml配置中的<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">標(biāo)簽,讓spring幫我們創(chuàng)建對象并管理的配置)

    1. @Bean(name = "someBean",initMethod = "init",destroyMethod = "destroy")這個(gè)和標(biāo)簽配置方式一樣,分別代表被創(chuàng)建,被初始化和被銷毀
    2. 我們貼@Bean注解的時(shí)候一定要被掃描到,注解才能生效(一般配合@ComponentScan使用,這個(gè)注解可以指定掃描的路徑,如果不指定,那么就在@ComponentScan注解所貼類的所在包及其子包進(jìn)行掃描)
    3. @Bean有個(gè)scope屬性,@scope要單獨(dú)貼一下,它是表示該bean的作用情況Singleton(單例,一個(gè)spring容器中只有一個(gè),也是我們默認(rèn)使用的);Protetype(每次調(diào)用創(chuàng)建一個(gè)新bean);Request(web項(xiàng)目中,給每個(gè)HTTPrequest新建一個(gè)bean);Session(web項(xiàng)目中,給每個(gè)http session新建一個(gè)bean);GlobalSession(給每一個(gè) global http session新建一個(gè)Bean實(shí)例)
    4. bean對象里面有其他bean對象作為屬性注入時(shí),例如在SomeBean類中有屬性O(shè)therBean
          @Configuration
          //組件掃描件標(biāo)簽,如果不指定basePackages,那么默認(rèn)是掃描當(dāng)前類所在包及其子包
          @ComponentScan()
          public class AppConfig {
      
              @Bean
              public OtherBean otherBean(){
                  return new OtherBean();
              }
      
              //方式一
              @Bean
              public SomeBean someBean(){
      
                  SomeBean someBean = new SomeBean();
                  /*注意,這里設(shè)置的otherbean一定不能自己new,否則拿到的就不是spring容器里的
                  ,而要直接調(diào)用otherBean()
                  */
                  someBean.setOtherBean(otherBean());
                  return someBean;
              }
      
              //方式二
              @Bean
              public SomeBean someBean(OtherBean otherBean){
                  //該方式是直接定義參數(shù)去接收OtherBean,spring容器會自動(dòng)幫我們創(chuàng)建好
                  //ohernbean并傳過來
                  SomeBean someBean = new SomeBean();
                  someBean.setOtherBean(otherBean);
                  return someBean;
              }
          }
      
  5. @Value注解

    1. 支持如下方式的注入:
      • 注入普通字符
      • 注入操作系統(tǒng)屬性
      • 注入表達(dá)式結(jié)果
      • 注入其它bean屬性
      • 注入文件資源
      • 注入網(wǎng)站資源
      • 注入配置文件
    2. @Value三種情況的用法。
      • ${}是去找外部配置的參數(shù),將值賦過來
      • #{}是SpEL表達(dá)式,去尋找對應(yīng)變量的內(nèi)容
      • #{}直接寫字符串就是將字符串的值注入進(jìn)去

SpringMVC常用注解

  1. @EnableWebMvc在配置類中開啟WebMVC的配置支持。

  2. @Controller

  3. @RequestMapping用于映射web請求,包括訪問路徑和參數(shù)。

  4. @ResponseBody支持將返回值放到response內(nèi),而不是一個(gè)頁面,通常用戶返回json數(shù)據(jù)。

  5. @RequestBody允許request的參數(shù)在request體中,而不是在直接連接的地址后面。(放在參數(shù)前)

  6. @PathVariable用于接收路徑參數(shù),比如@RequestMapping(“/hello/{name}”)聲明的路徑,將注解放在參數(shù)前,即可獲取該值,通常作為Restful的接口實(shí)現(xiàn)方法。

  7. @RestController
    該注解為一個(gè)組合注解,相當(dāng)于@Controller和@ResponseBody的組合,注解在類上,意味著,該Controller的所有方法都默認(rèn)加上了@ResponseBody。

  8. @ControllerAdvice(控制器增強(qiáng))

    • 全局異常處理
    • 全局?jǐn)?shù)據(jù)綁定
    • 全局?jǐn)?shù)據(jù)預(yù)處理

    ControllerAdvice的常用場景

  9. @ExceptionHandler(RuntimeException.class)用于全局處理控制器里的異常。這里表示的是處理runtime類型的異常

  10. @InitBinder
    用來設(shè)置WebDataBinder,WebDataBinder用來自動(dòng)綁定前臺請求參數(shù)到Model中。

  11. @ModelAttribute
    (1)@ModelAttribute注釋方法
    如果把@ModelAttribute放在方法的注解上時(shí),代表的是:該Controller的所有方法在調(diào)用前,先執(zhí)行此@ModelAttribute方法。可以把這個(gè)@ModelAttribute特性,應(yīng)用在BaseController當(dāng)中,所有的Controller繼承BaseController,即可實(shí)現(xiàn)在調(diào)用Controller時(shí),先執(zhí)行@ModelAttribute方法。比如權(quán)限的驗(yàn)證(也可以使用Interceptor)等。

    (2)@ModelAttribute注釋一個(gè)方法的參數(shù)
    當(dāng)作為方法的參數(shù)使用,指示的參數(shù)應(yīng)該從模型中檢索。如果不存在,它應(yīng)該首先實(shí)例化,然后添加到模型中,一旦出現(xiàn)在模型中,參數(shù)字段應(yīng)該從具有匹配名稱的所有請求參數(shù)中填充。(說人話就是@ModelAttribute注解的參數(shù)要被實(shí)例化,并且添加到model中,同時(shí)還可以給實(shí)例化的像取個(gè)名字)

  12. @Transactional (事務(wù)),可以這樣用@Transactional(propagation= Propagation.SUPPORTS,readOnly=true)

    • @Transactional 注解的屬性信息
      • 屬性名 說明
        name 當(dāng)在配置文件中有多個(gè) TransactionManager , 可以用該屬性指定選擇哪個(gè)事務(wù)管理器。
        propagation 事務(wù)的傳播行為,默認(rèn)值為 REQUIRED。
        isolation 事務(wù)的隔離度,默認(rèn)值采用 DEFAULT。
        timeout 事務(wù)的超時(shí)時(shí)間,默認(rèn)值為-1。如果超過該時(shí)間限制但事務(wù)還沒有完成,則自動(dòng)回滾事務(wù)。
        read-only 指定事務(wù)是否為只讀事務(wù),默認(rèn)值為 false;為了忽略那些不需要事務(wù)的方法,比如讀取數(shù)據(jù),可以設(shè)置 read-only 為 true。
        rollback-for 用于指定能夠觸發(fā)事務(wù)回滾的異常類型,如果有多個(gè)異常類型需要指定,各類型之間可以通過逗號分隔。
        no-rollback- for 拋出 no-rollback-for 指定的異常類型,不回滾事務(wù)。

springBoot中用到的其他一些注解

  1. @configuration:貼了這個(gè)注解就表示當(dāng)前類為配置類(類似于xml,可以配置各種bean等)
  2. @Import:可以用于導(dǎo)入其他的配置類,例如:@Import(OtherConfig.class)
  3. @ImportResource:配置文件導(dǎo)入注解,例如:@ImportResource("classpath:applicationContext.xml")
  4. 測試相關(guān)@RunWith(SpringRunner.class) @ContextConfiguration(classes = {AppConfig.class})這兩個(gè)是配合使用的,runwith是運(yùn)行器,如果里面放入JUnit4.class,就表示用JUnit4來運(yùn)行ContextConfiguration可以傳入配置類,或者配置文件
  5. @PropertySource:資源文件加載配置注解,用于將properties類型文件加載到spring容器中,貼在類上(@PropertySource("classpath:db.properties"))就類似于如下效果
    <context:property-placeholder location="classpath:db.perperties"/>
  1. @SpringBootApplication啟動(dòng)類注解,貼了這個(gè)注解的類就成為了啟動(dòng)類,一般springBoot項(xiàng)目就只有一個(gè)啟動(dòng)類,啟動(dòng)類都是配置類
  2. @Slf4j這是lombok提供的日志注解,等價(jià)于private static final Logger log = LoggerFactory.getLogger(當(dāng)前類.class);
  3. @MapperScan:mapper掃描注解,用來幫忙創(chuàng)建mapper接口的動(dòng)態(tài)代理實(shí)現(xiàn)類,因?yàn)槠涫亲饔糜诮涌诘?所以配置的時(shí)候一定要配到mapper包(@MapperScan("cn.sushen.crm.mapper")),否則可能把其他的接口也創(chuàng)建了代理實(shí)現(xiàn)類
  4. @RequestParam:將請求參數(shù)綁定到你控制器的方法參數(shù)上(是springmvc中接收普通參數(shù)的注解)
        @RequestMapping("show16")
        public ModelAndView test16(@RequestParam("name")String name)
        {
            //@RequestParam("name")里面的參數(shù)name必須和請求傳過來的參數(shù)一致,即
            //傳過來的也要為name,但是后面接收的String name可以不必為name,因?yàn)槭?        //將@RequestParam取到的值,賦值給后面的形參
            ModelAndView mv = new ModelAndView();
            mv.setViewName("hello2");
            mv.addObject("msg", "接收普通的請求參數(shù):" + name);
            return mv;
        }
    
    
  5. @ConfigurationProperties:批量綁定屬性,從application.properties里面批量取出屬性,進(jìn)行綁定,綁定到的自定義的類定義的屬性必須和application.properties里面的名稱一致(便可實(shí)現(xiàn)自動(dòng)綁定)
         @Component @ToString @Setter @Getter
         @ConfigurationProperties("jdbc")  
       //相當(dāng)于 @ConfigurationProperties(prefix="jdbc")
        public class MyData { 
             private String username; 
             private String password; 
        }
        //或者在配置類中自動(dòng)綁定
        @Bean @ConfigurationProperties("jdbc") 
        public MyData myData() { 
            return new MyData(); 
        }
    
  6. @PathVariable("xxx"):通過 @PathVariable 可以將URL中占位符參數(shù){xxx}綁定到處理器類的方法形參中@PathVariable(“xxx“),例如:
        @RequestMapping("show/{id}/{name}")
        //@RequestMapping和@PathVariable里面的占位符名稱必須一樣(這里對應(yīng)的
        //是id和name),這樣訪問localhost/show/112/java路徑,那么在test5方法中就
        //能拿到對應(yīng)的id=112,name=java
        public ModelAndView test5(@PathVariable("id") Long ids ,@PathVariable("name") String names){
            ModelAndView mv = new ModelAndView();
            mv.addObject("msg","占位符映射:id:"+ids+";name:"+names);
            mv.setViewName("hello2");
            return mv;
        }
    
    
  7. 【Java用法】Java程序中@Valid注解是什么以及@Valid注解的用法_No8g攻城獅的博客-CSDN博客
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容