javascript
JAVA_SpringBoot中涉及的注解
SpringBoot注解
動吧
new 對象是一個耗時的過程,
spring 是一個資源整合框架。
@SpringBootApplication
由此注解(@SpringBootApplication)描述的類為springBoot項目的啟動入口類
- 1)springBoot項目的啟動入口只有一個
- 2)springBoot項目的啟動入口需要使用(@SpringBootApplication)注解描述
@Component 交給Spring管理 是Spring中用于描述Bean類的一個注解。用于告訴Spring這個類的實例由Spring創(chuàng)建,當(dāng)此對象由Spring創(chuàng)建和管理時,默認(rèn)會將對象存儲到池(Bean池)中。
@Lazy 懶加載 注解用于描述類,其目的是告訴spring框架此類支持延遲加載,通常會配合單例作用域使用。
@Scope(value = “singleton”) = @Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) 默認(rèn)(單例)作用域,對象頻率高,存池Pool里
@Scope(“prototype”) 多例作用域,頻率低
@Autowired 注解描述屬性 ,用于告訴spring框架,此屬性注入一個值
@Autowired has a 關(guān)系 Dao–Controller
@SpringBootTest 注解用于告訴spring框架,此測試類交給spring管理
@PostConstruct 注解用于描述bean對象生命周期方法中的初始化方法,此方法會在對象的構(gòu)造方法之后執(zhí)行(是對象創(chuàng)建以后的初始化)。
@PreDestroy 注解用于描述Bean對象生命周期方法中的銷毀方法,此方法會在對象銷毀之前執(zhí)行(當(dāng)作用域為prototype時,此方法不會執(zhí)行)。
Dependent lookup
@Component
Component默認(rèn)是單例的
@Scope(“prototype”)設(shè)為多例
帶此注解的類看為組件,當(dāng)使用基于注解的配置和類路徑掃描的時候,這些類就會被實例化
這個值可能作為邏輯組件(即類)的名稱,在自動掃描的時候轉(zhuǎn)化為spring bean,即相當(dāng)中的id
@Service
@Controller
@RequestMapping("/goods/")
自定義注解 @Retention @Target
- @Retention 用于描述注解何時有效,例如RUNTIME就表示運行時有效
- @Target 用于描述注解可以描述哪些對象?例如Type表示注解可以描述類和接口
@ResponseBody
//作用1。將對象轉(zhuǎn)換為JSON 2.如果返回值是String類型,則返回字符串本身 3.一般客戶端發(fā)起ajax請求時,采用該注解返回數(shù)據(jù),將不會執(zhí)行試圖解析操作
//方法返回值為對象(不包字符串,直接量如Long id),spring mvc 可以將其轉(zhuǎn)換為JSON格式的字符串
//spring mvc 框架底層默認(rèn)會使用jackson API將對象轉(zhuǎn)化為json格式的字符串
返回客戶端數(shù)據(jù) 為JSON格式的字符串
JSON 屬于一種數(shù)據(jù)結(jié)構(gòu) {“key1”:“value1”,“key2”:“value2”,…}
@RestController == @Controller + @ResponseBody
Repository
@Mapper
注解由mybatis框架定義,用于描述數(shù)據(jù)層接口對象,系統(tǒng)底層啟動mybatis框架注解的描述,創(chuàng)建其接口實現(xiàn)類,并將實現(xiàn)類對象交給spring管理
@MapperScan(“con.tedu.mapper”)
掃描該包下的所有mapper類作為Mapper映射文件
mapper包多時使用
@Param 于SpringBoot項目,及執(zhí)行動態(tài)SQL語句
int deleteByIds(@Param(“ids”) Integer…ids );
用來傳多個參數(shù)
給mybaties的數(shù)據(jù)起別名(傳參時的別名字段)
@Table
對應(yīng)數(shù)據(jù)庫的表,如果不寫默認(rèn)是類名首字母小寫作為表名,比Member,不寫數(shù)據(jù)庫表默認(rèn)指向member
@Column
的屬性name對應(yīng)數(shù)據(jù)庫表的字段,如果不寫默認(rèn)是駝峰下劃線匹配,比如private Long myId,如果不寫得話,就是對應(yīng)數(shù)據(jù)庫表字段my_id
@Id:
把當(dāng)前字段作為數(shù)據(jù)庫主鍵使用,匹配數(shù)據(jù)庫主鍵。如果不貼此注解,在某些查詢語句的時候會把表字段一起作為聯(lián)合主鍵查詢
@GeneratedValue
讓通用mapper在執(zhí)行insert操作之后將自動生成的主鍵值回寫到當(dāng)前實體對象對應(yīng)的屬性當(dāng)中
LOMBOK 下注解
@Data // getter、setter 提供了 equals()、hashCode()、toString() 方法
@AllArgsConstructor // 全參構(gòu)造方法
@NoArgsConstructor // 無參構(gòu)造方法
@Accessors(chain = true) // 鏈?zhǔn)骄幊虒懛?既可以注解在類上也可以注解在屬性上
@ControllerAdvice 注解描述的類,spring mvc 會認(rèn)為它是一個控制層全局異常處理對象
@RestControllerAdvice == @ControllerAdvice + @ResponseBody
@ExceptionHandler (RuntimeException.class) 注解描述的方法為異常處理方法
此注解中定義的異常類型,為這個方法可以處理的異常類型, 它可以處理此 異常以及這個異常類型的子類類型的異常
@PathVariable 注解用于從rest風(fēng)格的url中取和參數(shù)對應(yīng)的值
rest風(fēng)格(一種架構(gòu)風(fēng)格)的url 其語法結(jié)構(gòu){變量名}/{變量}
指定日期 客戶端----->數(shù)據(jù)庫 @DateTimeFormat(pattern = “yyyy/MM/dd HH:mm”) set方法
@JsonFormat(pattern = “yyyy/MM/dd HH:mm:ss”,timezone = “GMT+8”) //此注解用于描述屬性或get方法
@Aspect 注解描述的類型為spring AOP中的切面類型。@Order(1) @Order(2) 數(shù)字越小優(yōu)先級越高,默認(rèn)優(yōu)先級比較低。 此對象中可以封裝:
1.切入點(定義在哪些目標(biāo)方法上進行功能擴展)
2.通知(封裝功能擴展的業(yè)務(wù)邏輯 )
用于標(biāo)識或者描述AOP中的切面類型,基于切面類型構(gòu)建的對象用于為目標(biāo)對象進行功能擴展或控制目標(biāo)對象的執(zhí)行。
@Slf4j 日志 import lombok.extern.slf4j.Slf4j;
@Pointcut 注解用于定義切入點,具體方式可以基于特定表達式進行實現(xiàn) bean within excution @annotation
1.bean 為一種切入點表達式類型2.sysUserServiceImpl 為spring容器中的一個名字,并首字母小寫涵義:sysUserServiceImpl對象中的任意方法執(zhí)行時,都由本切面對象的通知方法做功能增強 @Pointcut("bean(sysUserServiceImpl)")public void doLogPointcut() {} //方法不寫代碼 ,只為注解提供環(huán)境1.bean 用于匹配指定bean對象的所有方法
? bean(“userServiceImpl”)指定一個userServiceImpl類中所有方法。
? bean("*ServiceImpl")指定所有后綴為ServiceImpl的類中所有方法。
2.within 用于匹配指定包下所有類內(nèi)的所有方法
? within(“aop.service.UserServiceImpl”)指定當(dāng)前包中這個類內(nèi)部的所有方法。
? within(“aop.service.") 指定當(dāng)前目錄下的所有類的所有方法。
? within("aop.service…”) 指定當(dāng)前目錄以及子目錄中類的所有方法。
3.excution 用于按指定語法規(guī)則匹配到具體方法
語法:execution(返回值類型 包名.類名.方法名(參數(shù)列表))。
? execution(void aop.service.UserServiceImpl.addUser())匹配addUser方法。
? execution(void aop.service.PersonServiceImpl.addUser(String)) 方法參數(shù)必須為String的addUser方法。
? execution(* aop.service….(…)) 萬能配置。
@annotation 用于匹配指定注解修飾的方法
? @annotation(anno.RequiredLog) 匹配有此注解描述的方法。
? @annotation(anno.RequiredCache) 匹配有此注解描述的方法。
@Around 環(huán)繞通知:使用切入點為bean(sysUserServiceImpl)
用于描述切面中方法,這樣的方法會被認(rèn)為是一個環(huán)繞通知(核心業(yè)務(wù)方法執(zhí)行之前和之后要執(zhí)行的一個動作),@Aournd注解內(nèi)部value屬性的值為一個切入點表達式或者是切入點表達式的一個引用(這個引用為一個@PointCut注解描述的方法的方法名)。
特點:
1.編寫
* 1.1.方法的返回值為Object* 1.2.方法參數(shù)為ProceedingJoinPoint類型 連接點類型,此類型的對象用于封裝要執(zhí)行的目標(biāo)方法相關(guān)的一些信息。一般用于@Around注解描述的方法參數(shù)。* 1.3.方法拋出異常為throwable2.應(yīng)用
* 2.1.目標(biāo)方法執(zhí)行之前或之后都可以進行功能拓展* 2.2.相對于其他通知優(yōu)先級最高* @param ProceedingJoinPoint 為一個連接對象(封裝了正在執(zhí)行的目標(biāo)方法信息)* @return 目標(biāo)方法的返回值* @throws Throwable @Around("doLogPointcut()")public Object around(ProceedingJoinPoint jp)throws Throwable{log.info("method start {}",System.currentTimeMillis()); //開始try {Object result = jp.proceed();//最終會執(zhí)行目標(biāo)方法log.info("method end {}",System.currentTimeMillis()); //結(jié)束return result;} catch (Throwable e) {e.printStackTrace();log.error("method error {}",System.currentTimeMillis()); //錯誤throw e;}通知注解
@Pointcut
@Around
@Around.Before
@Before
@AfterReturning 核心業(yè)務(wù)正常
@AfterThrowing 核心業(yè)務(wù)出現(xiàn)異常
@After 不管是否正確都執(zhí)行
@Around.After
Cache 緩存注解
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD,ElementType.TYPE}) @Target(ElementType.METHOD)
自定義注解:(使用@interface定義注解,默認(rèn)所以注解都 繼承 is a Annotation類型的對象)
@Target 注解用于告訴jdk我們自己寫的注解描述的對象
@author MTA 注解用于告訴jdk我們自己寫的注解何使有效
說明:所有的注解都是一種元素?fù)?jù)(Menta Data)一種描述數(shù)據(jù)的數(shù)據(jù)(例如 使用注解描述類,描述方法,描述屬性,描述方法參數(shù)等等)
@Transactiona spring 事務(wù)
當(dāng)使用該注解表示所有方法都要進行事務(wù)控制,類上使用@Transactional注解用于定義方法上的事務(wù)共性,假如還有事務(wù)特性可以在對應(yīng)的方法上繼續(xù)使用@Transactional注解定義事務(wù)特性
@Transactional(readOnly = true) 之應(yīng)用于查詢方法
@Transactional(readOnly = false) 用于添加修改刪除
@Transactional(readOnly = false,
rollbackFor = RuntimeException.class, 回滾 noRollbackFor = MyBatisSystemException.class)@Transactional(readOnly = false,
rollbackFor = Throwable.class,timeout = 10, 超時isolation = Isolation.READ_COMMITTED) 事務(wù)特性 臟讀 幻讀 重復(fù)讀 propagation = Propagation.REQUIRES_NEW) pa b gai seng * 表示寫日志的操作始終會運行在一個獨立的事務(wù)中@Async //異步 執(zhí)行業(yè)務(wù)方法 @Async //注解描述的方法會運行在由spring框架提供的一個線程中。
@EnableAsync //異步 啟動spring框架中的異步操作(底層會創(chuàng)建一個線程池)
@EnableCaching //啟動Cache 緩存
@Cacheable(value = “menuCache”) //menuCache為緩存對象的名稱 保存緩存
@CacheEvict(value = “menuCache”,allEntries = true,beforeInvocation = false) 清除緩存 清除所有 方法執(zhí)行后
@Configuration 注解描述的類為一個配置對象,
此對象也會交給spring管理
@Bean 通常會配置@Configuration注解進行使用,其特點:
1.此注解描述方法會交給spring管理2.@Beean注解沒有指定其value屬性的值,則bean的名字默認(rèn)為方法名@RequiresPermissions 這個注解描述的方法為一個切入點方法 .@RequiresPermissions(value=“sys:user:valid”)//value可以省略
此方法在執(zhí)行之前需要進行權(quán)限檢測(負(fù)責(zé)這個過程的方法是一個通知方法),假如用戶權(quán)限中包含 @RequiresPermissions 注解value屬性指定的值,則授權(quán)訪問,不包含則拋出異常
京淘
@PropertySource
//動態(tài)的導(dǎo)入pro配置文件,交給spring容器進行加載
@PropertySource("classpath:/properties/redis.properties")// :后 / 根目錄是resources properties\redis.properties lunx中只有正斜杠
@Value("${redis.host}")
//spel(spring EL)表達式
lombok
@Accessors(chain = true) import lombok.experimental.Accessors;
//鏈?zhǔn)郊虞d
User user = new User();// user.getId();user.setId(100).setName("ssss");@Data
@Accessors(chain = true) //鏈?zhǔn)郊虞d
@NoArgsConstructor //添加無參構(gòu)造
@AllArgsConstructor //添加全參構(gòu)造
@MapperScan(“com.jt.dao”)
//主要告訴Mapper的包路經(jīng),會自動的完成包掃描
不用再每個DAO類上添加注解@Mapper
DAO類中再添加注解@Mapper 不會影響程序正常運行
Mybaties-puls 中對對象pojo的注解
@TableName(“user”) //user可以省略
//將表與對象 進行一一對應(yīng)
@TableId(type = IdType.AUTO)
//主鍵的信息 設(shè)定自增
@TableField(value = “name”)
//如果字段名稱與屬性的名稱一致(包含駝峰規(guī)則映射),可以省略不寫
總結(jié)
以上是生活随笔為你收集整理的JAVA_SpringBoot中涉及的注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python互相关函数_计算互相关函数?
- 下一篇: SpringBoot Shiro 配置自