<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java常用注解(Annotation)詳解匯總

          共 5405字,需瀏覽 11分鐘

           ·

          2021-03-09 23:07

          關(guān)注“后端碼匠” 


          優(yōu)質(zhì)文章第一時(shí)間送達(dá)!


          一,元注解(用來修飾注解的注解)

          二,Spring中的注解

          • SpringMVC注解
          • IOC容器注解
          • Bean的范圍的注解:
          • Bean的生命周期注解:
          • Spring啟動類注解(開箱即用):
          • 請求Mapping注解
          • 動態(tài)賦值注解
          • 緩存注解

          三,AOP切面注解

          四,常用插件注解

          • Lombok 插件
          • MybatisPlus 注解
          • Shiro 注解

          五,其他注解

          • Async異步注解
          • 注釋注解
          • 其他注解

          先來說說什么是注解:

          注解其實(shí)就是代碼里的特殊標(biāo)記,它用于替代配置文件,有了注解技術(shù)后,開發(fā)人員可以通過注解告訴類如何運(yùn)行。通過元注解來定義(修飾)自定義注解并定義所需要實(shí)現(xiàn)的功能。注解可以標(biāo)記在包、類、屬性、方法,方法參數(shù)以及局部變量上,且同一個(gè)地方可以同時(shí)標(biāo)記多個(gè)注解。在Java技術(shù)里注解的典型應(yīng)用是:可以通過反射技術(shù)去得到類里面的注解,以決定怎么去運(yùn)行類。

          一,元注解(用來修飾注解的注解)

          從JDK 1.5開始, Java增加了對元數(shù)據(jù)(MetaData)的支持,提供了4個(gè)標(biāo)準(zhǔn)的用來對注解類型進(jìn)行注解的注解類,我們稱之為 meta-annotation(元注解)
          @Target(ElementType.) 描述注解的使用范圍(即:被修飾的注解可以用在什么地方)

          取值(ElementType)有:
          1.CONSTRUCTOR:用于描述構(gòu)造器
          2.FIELD:用于描述域
          3.LOCAL_VARIABLE:用于描述局部變量
          4.METHOD:用于描述方法
          5.PACKAGE:用于描述包
          6.PARAMETER:用于描述參數(shù)
          7.TYPE:用于描述類、接口(包括注解類型)或enum聲明

          @Retention(RetentionPolicy.) 描述注解的生命周期(即:被修飾的注解被保留到何時(shí))

          取值(RetentionPoicy)有:
          1.SOURCE:在源文件中有效(即源文件保留)
          2.CLASS:在class文件中有效(即class保留)
          3.RUNTIME:在運(yùn)行時(shí)有效(即運(yùn)行時(shí)保留)

          @Documented 會被javadoc工具動態(tài)提取成文檔。
          @Inherited 允許子類繼承父類中的注解。

          二,Spring中的注解

          SpringMVC注解

          這些注解描述的類 Spring會創(chuàng)建原生對象或代理對象并交給 IOC容器 管理,這些對象稱之為bean。用時(shí)直接 @Autowired 注入即可。

          @Mapper 描述數(shù)據(jù)層 (Mapper)
          @Service 描述業(yè)務(wù)層 (Service)
          @Repository 標(biāo)識持久層 / 數(shù)據(jù)訪問層組件(Dao)
          @Component 可以描述各種組件(當(dāng)組件不好歸類時(shí))
          @RestController 描述控制層(Controller)并返回json數(shù)據(jù)類型,但不會再執(zhí)行SpringMVC中的視圖解析器。
          /* 該注解等同于:@Controller + @ResponseBody */
          @Controller 描述控制層 接收用戶請求 執(zhí)行 視圖解析器 (進(jìn)行路徑拼接 前綴+后綴 ViewResolver解析 view渲染)。
          @ResponseBody 將java對象轉(zhuǎn)為json格式的數(shù)據(jù)。

          IOC容器注解

          IOC(Inversion of Control) 是控制反轉(zhuǎn),也叫依賴注入(DI)。
          把復(fù)雜系統(tǒng)分解成相互合作的對象,這些對象類通過封裝以后,內(nèi)部實(shí)現(xiàn)對外部是透明的,從而降低了解決問題的復(fù)雜度,而且可以靈活地被重用和擴(kuò)展。
          簡單來說:IOC意味著將你設(shè)計(jì)好的對象交給容器控制,需要的時(shí)候通過注解來注入(獲取),而不是傳統(tǒng)的在你的對象內(nèi)部直接控制(new 對象)。從而降低了程序的耦合性。

          @Bean 描述 方法 的返回值 交給容器管理,不需要再手動調(diào)用該方法。
          @Autowired 注入對象(按byType自動注入)
          @Resource 注入對象(按byName自動注入)
          @Value 注入普通類型屬性。

          如果容器中有多個(gè)相同類型的 bean,則框架將拋出 NoUniqueBeanDefinitionException, 以提示有多個(gè)滿足條件的
          bean 進(jìn)行自動裝配。程序無法正確做出判斷使用哪一個(gè)時(shí),可以使用以下注解??

          @Qualifier("") 在相同類型bean上命名后,可以按不同名稱注入 配合@Autowired 使用。
          @Primary 當(dāng)存在多個(gè)相同類型的 bean 時(shí),首選被@Primary注解過的bean。

          Bean的范圍的注解:
          @Scope(value="") 默認(rèn)生成的類是單例的。

          取值(value) 有:
          1.singleton :單例
          2.prototype :多例
          3.request :request域,需要在web環(huán)境
          4.session :session域,需要在web環(huán)境
          5.application:context域,需要在web環(huán)境
          6.globalsession 集群環(huán)境的session域,需要在web環(huán)境

          Bean的生命周期注解:
          @PostConstruct 相當(dāng)于init-method
          @PreDestroy 相當(dāng)于destroy-method

          Spring啟動類注解(開箱即用):

          只需要導(dǎo)入簡單的jar包文件,就可以實(shí)現(xiàn)對應(yīng)的功能,無需(少量)繁瑣的配置。
          @SpringBootAppliction 用在啟動類上,主要目的是開啟自動配置 組合了:

          1)@SpringBootConfiguration 定義了SpringBoot的配置類 通過@Configuration 來定義配置信息
          2)@EnableAutoConfiguration 自動化配置, 該注解里面有@AutoConfigurationPackage 自動配置的包掃描 @Import調(diào)用選擇器去加載pom.xml文件中的啟動項(xiàng)
          3)@ComponentScan 定義包掃描 指定路徑 哪些包中的對象交給IOC容器管理。

          請求Mapping注解
          @RequestMapping("/xxx") 注解類上 通過"/xxx"來指定控制器可以處理哪些URL請求。
          請求方式:
          @GetMapping 通常注解查詢方法
          @PostMapping 通常注解增添保存方法
          @DeleteMapping 通常注解刪除方法
          @PutMapping 通常注解更新方法
          @PatchMapping 通常注解更新局部方法

          動態(tài)賦值注解

          @PathVariable 接收的url動態(tài)傳給被注解的參數(shù)(restFull風(fēng)格)
          @RequestBody 將接收的json格式的數(shù)據(jù)轉(zhuǎn)為java對象參數(shù)(適用于post請求)
          @RequestParam(value=“接收的xxx”) 講接收的xxx傳給被注解的參數(shù) (適用于post,get請求)

          緩存注解

          @EnableCaching 啟動springboot工程中的內(nèi)置緩存。
          @Cacheable(value=“緩存值取名”) 把返回值進(jìn)行緩存,緩存通過切面自動切入,可用用于方法或者類上。

          參數(shù)描述
          value名稱
          keykey
          condition可判斷key條件

          @CacheEvict(value=“需要清空的緩存名”) 方法是一個(gè)清緩存的切入點(diǎn)方法,當(dāng)這個(gè)方法被調(diào)用后,即會清空緩存。

          參數(shù)描述
          value名稱
          keykey
          condition緩存的條件,可以為空
          allEntries是否清空所有緩存內(nèi)容
          beforeInvocation是否在方法執(zhí)行前就清空

          三,AOP切面注解

          @Pointcut("@annotation(被切入方法的地址)") 設(shè)置切入點(diǎn)
          @Before(“pointCut()”) 在切點(diǎn)方法前執(zhí)行
          @After(“pointCut()”) 在切點(diǎn)方法后執(zhí)行
          @Around(“pointCut()”) 在切點(diǎn)方法外環(huán)繞執(zhí)行,需要執(zhí)行ProceedingJoinPoint對象的proceed方法來加載需要切入的方法。

          四,常用插件注解

          Lombok 插件

          @Data 動態(tài)添加get/set/toString/equals/hashcode/構(gòu)造方法 適用于pojo / VO該注解等同于:

          @Getter + @Setter + ToString + @EqualsAndHashCode + @RequiredArgsConstructor

          @Value 把所有的變量都設(shè)成 final 修飾 和 @Data相似
          @AllArgsConstructor 添加構(gòu)造方法
          @NoArgsConstructor 添加無參構(gòu)造
          @sfl4g 自動生成該類的 log 靜態(tài)常量
          @Accessors(chain = true) 引用鏈?zhǔn)郊虞d方式 方便做插入操作。

          Lombok插件 官方文檔說明:
          https://projectlombok.org/

          MybatisPlus 注解

          MyBatis-Plus (opens new window)(簡稱 MP)是一個(gè) MyBatis (opens new window) 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生。

          @TableName(value="", resultMap="") 表名與實(shí)體類名不一致時(shí) 需要在實(shí)體類上加入注解"value=表名",xml 中 resultMap 的 id 不一致時(shí)需要賦值。
          @TableId(value= “”, type = IdType.AUTO) 表示主鍵名/屬性。@IdType的值有:

          AUTO 數(shù)據(jù)庫自增
          INPUT 自行輸入
          ID_WORKER 分布式全局唯一ID 長整型類型
          UUID 32位UUID字符串
          NONE 無狀態(tài)
          ID_WORKER_STR 分布式全局唯一ID 字符串類型

          @TableField("…") 注解新增屬性,如果字段名與屬性一致(已開啟駝峰規(guī)則),則可省略,否則加入"exist=false"參數(shù)。V

          參數(shù)描述
          value字段值,如果字段名與屬性一致(已開啟駝峰規(guī)則)則可省略
          update預(yù)處理 set 字段自定義注入
          condition預(yù)處理 WHERE 實(shí)體條件自定義運(yùn)算規(guī)則
          exist是否為數(shù)據(jù)庫表字段
          fill字段填充

          @TableLogic 表字段邏輯處理注解(邏輯刪除)

          Mybatis-Plus官方文檔說明:
          https://mp.baomidou.com/guide/annotation.html

          Shiro 注解

          Shiro 提供了相應(yīng)的注解用于權(quán)限控制,如果使用這些注解就需要使用AOP 的功能來進(jìn)行判斷

          @RequiresAuthentication 表示當(dāng)前Subject已經(jīng)通過login 進(jìn)行了身份驗(yàn)證,即Subject. isAuthenticated()返回true。
          @RequiresGuest 表示當(dāng)前Subject沒有身份驗(yàn)證或通過記住我登錄過,即是游客身份。
          @RequiresUser 表示當(dāng)前Subject已經(jīng)身份驗(yàn)證或者通過記住我登錄的。
          @RequiresRoles(value={“admin”, “user”}, logical= Logical.AND)表示當(dāng)前Subject需要角色 admin 和(AND) user ,value表示需要判斷的角色,logical表示判斷條件。
          @RequiresPermissions(value={“user:a”, “user:b”}, logical= Logical.OR)
          表示當(dāng)前Subject需要權(quán)限 user:a 或(OR) user:b ,value表示需要判斷的權(quán)限,logical表示判斷條件。

          Shiro框架 官方文檔說明:
          http://shiro.apache.org/#

          五,其他注解

          Async異步注解

          @Async 注解描述的方法為一個(gè)異步切入點(diǎn)方法(聲明該方法執(zhí)行異步),啟動類上需要加上@EnableAsync才能使其生效。
          這個(gè)方法會在切面通知方法中通過一個(gè)新的線程調(diào)用執(zhí)行,由spring線程池提供。@EnableAsync 可以使用多線程 描述該類支持異步

          注釋注解

          @param Dao層(Mapper)的注解,作用是用于傳遞多個(gè)參數(shù)
          @return 說明該方法有返回值。只是起到一個(gè)說明作用

          其他注解

          不同的的業(yè)務(wù)文件放在不同的配置文件yml中,所以需要?jiǎng)討B(tài)加載配置文件@PropertySource(value=“classpath:/…”,ebcidubg=“UTF-8”) 動態(tài)加載配置文件 為了給定義的變量賦值
          @Select("…") 簡單的sql語句可以用該注解直接在方法上描述
          @CrossOrigin 此注解描述的Controller,表示允許跨域訪問


          這些黑客經(jīng)常掛在嘴邊的“黑話”,你知道多少?

          產(chǎn)品經(jīng)理 VS 項(xiàng)目經(jīng)理 = 親媽 VS 奶媽

          對于注冊中心,ZooKeeper、Eureka 哪個(gè)更合適?

          以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯(cuò)的,歡迎「分享」「」或者點(diǎn)擊「在看」支持,謝謝各位。

          瀏覽 86
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  三级www| 唐山熟女工棚嗷嗷叫 | 黄免费视频 | 天天干干天天 | 操我骚逼 |