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