springBoot項(xiàng)目相關(guān)注解
spring相關(guān)注解
-
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. -
DI相關(guān)注解
@AutoWired: 是spring提供的注解, 默認(rèn)先按類型進(jìn)行注入, 如果找到則注入, 找不到再按照名稱進(jìn)行注入; 如果找到多個(gè)匹配的類型, 拋出異常. @Resource: 是javax.annotation包中提供的注解, 默認(rèn)先按照名稱注入, 名稱一致則注入, 如果沒有同名的, 再按照類型注入. @Value: 用于讀取properties資源文件中的數(shù)據(jù), 并為其描述的屬性賦值. -
切面(AOP)相關(guān)注解
@Aspect 聲明一個(gè)切面 @After 在方法執(zhí)行之后執(zhí)行(方法上) @Before 在方法執(zhí)行之前執(zhí)行(方法上) @Around 在方法執(zhí)行之前與之后執(zhí)行(方法上) @PointCut 聲明切點(diǎn) -
@Bean注解(相當(dāng)于xml配置中的
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">標(biāo)簽,讓spring幫我們創(chuàng)建對象并管理的配置)- @Bean(name = "someBean",initMethod = "init",destroyMethod = "destroy")這個(gè)和標(biāo)簽配置方式一樣,分別代表被創(chuàng)建,被初始化和被銷毀
- 我們貼@Bean注解的時(shí)候一定要被掃描到,注解才能生效(一般配合@ComponentScan使用,這個(gè)注解可以指定掃描的路徑,如果不指定,那么就在@ComponentScan注解所貼類的所在包及其子包進(jìn)行掃描)
- @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í)例)
- 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; } }
-
@Value注解
- 支持如下方式的注入:
- 注入普通字符
- 注入操作系統(tǒng)屬性
- 注入表達(dá)式結(jié)果
- 注入其它bean屬性
- 注入文件資源
- 注入網(wǎng)站資源
- 注入配置文件
- @Value三種情況的用法。
- ${}是去找外部配置的參數(shù),將值賦過來
- #{}是SpEL表達(dá)式,去尋找對應(yīng)變量的內(nèi)容
- #{}直接寫字符串就是將字符串的值注入進(jìn)去
- 支持如下方式的注入:
SpringMVC常用注解
@EnableWebMvc在配置類中開啟WebMVC的配置支持。
@Controller
@RequestMapping用于映射web請求,包括訪問路徑和參數(shù)。
@ResponseBody支持將返回值放到response內(nèi),而不是一個(gè)頁面,通常用戶返回json數(shù)據(jù)。
@RequestBody允許request的參數(shù)在request體中,而不是在直接連接的地址后面。(放在參數(shù)前)
@PathVariable用于接收路徑參數(shù),比如@RequestMapping(“/hello/{name}”)聲明的路徑,將注解放在參數(shù)前,即可獲取該值,通常作為Restful的接口實(shí)現(xiàn)方法。
@RestController
該注解為一個(gè)組合注解,相當(dāng)于@Controller和@ResponseBody的組合,注解在類上,意味著,該Controller的所有方法都默認(rèn)加上了@ResponseBody。-
@ControllerAdvice(控制器增強(qiáng))
- 全局異常處理
- 全局?jǐn)?shù)據(jù)綁定
- 全局?jǐn)?shù)據(jù)預(yù)處理
ControllerAdvice的常用場景
@ExceptionHandler(RuntimeException.class)用于全局處理控制器里的異常。這里表示的是處理runtime類型的異常
@InitBinder
用來設(shè)置WebDataBinder,WebDataBinder用來自動(dòng)綁定前臺請求參數(shù)到Model中。-
@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è)名字) -
@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ù)。
-
- @Transactional 注解的屬性信息
springBoot中用到的其他一些注解
- @configuration:貼了這個(gè)注解就表示當(dāng)前類為配置類(類似于xml,可以配置各種bean等)
- @Import:可以用于導(dǎo)入其他的配置類,例如:
@Import(OtherConfig.class) - @ImportResource:配置文件導(dǎo)入注解,例如:
@ImportResource("classpath:applicationContext.xml") - 測試相關(guān)
@RunWith(SpringRunner.class) @ContextConfiguration(classes = {AppConfig.class})這兩個(gè)是配合使用的,runwith是運(yùn)行器,如果里面放入JUnit4.class,就表示用JUnit4來運(yùn)行ContextConfiguration可以傳入配置類,或者配置文件 - @PropertySource:資源文件加載配置注解,用于將properties類型文件加載到spring容器中,貼在類上(
@PropertySource("classpath:db.properties"))就類似于如下效果
<context:property-placeholder location="classpath:db.perperties"/>
- @SpringBootApplication啟動(dòng)類注解,貼了這個(gè)注解的類就成為了啟動(dòng)類,一般springBoot項(xiàng)目就只有一個(gè)啟動(dòng)類,啟動(dòng)類都是配置類
- @Slf4j這是lombok提供的日志注解,等價(jià)于
private static final Logger log = LoggerFactory.getLogger(當(dāng)前類.class); - @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)類
- @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; } - @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(); } - @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; } - 【Java用法】Java程序中@Valid注解是什么以及@Valid注解的用法_No8g攻城獅的博客-CSDN博客