一、啟動注解 @SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFi...
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public@interfaceSpringBootApplication{
}
查看源碼可發現, @SpringBootApplication
是一個復合注解,包含了 @SpringBootConfiguration
, @EnableAutoConfiguration`,
@ComponentScan` 這三個注解
`@SpringBootConfiguration
注解,繼承 @Configuration
注解,主要用于加載配置文件 @SpringBootConfiguration
繼承自 @Configuration
,二者功能也一致,標注當前類是配置類, 并會將當前類內聲明的一個或多個以 @Bean 注解標記的方法的實例納入到 spring 容器中,并且實例名就是方法名。
@EnableAutoConfiguration
注解,開啟自動配置功能 @EnableAutoConfiguration
可以幫助 SpringBoot 應用將所有符合條件的 @Configuration
配置都加載到當前 SpringBoot 創建并使用的 IoC 容器。借助于 Spring 框架原有的一個工具類:SpringFactoriesLoader 的支持, @EnableAutoConfiguration
可以智能的自動配置功效才得以大功告成
@ComponentScan
注解,主要用于組件掃描和自動裝配 @ComponentScan
的功能其實就是自動掃描并加載符合條件的組件或 bean 定義,最終將這些 bean 定義加載到容器中。我們可以通過 basePackages 等屬性指定 @ComponentScan
自動掃描的范圍,如果不指定,則默認 Spring 框架實現從聲明 @ComponentScan
所在類的 package 進行掃描,默認情況下是不指定的,所以 SpringBoot 的啟動類最好放在 root package 下。
控制器,處理 http 請求。
查看 @RestController 源碼
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public@interfaceRestController{
@AliasFor(annotation = Controller.class)
String value() default"";
}
從源碼我們知道, @RestController
注解相當于 @ResponseBody
+ @Controller
合在一起的作用, RestController 使用的效果是將方法返回的對象直接在瀏覽器上展示成 json 格式.
通過 HttpMessageConverter 讀取 Request Body 并反序列化為 Object(泛指)對象
@RequestMapping 是 Spring Web 應用程序中最常被用到的注解之一。這個注解會將 HTTP 請求映射到 MVC 和 REST 控制器的處理方法上
注解簡寫:@RequestMapping(value = "/say",method = RequestMethod.GET) 等價于:@GetMapping(value = "/say")
GetMapping 源碼
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public@interfaceGetMapping{
}
是 @RequestMapping(method = RequestMethod.GET) 的縮寫
@PostMapping 用于將 HTTP post 請求映射到特定處理程序的方法注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.POST)
public@interfacePostMapping{
}
是 @RequestMapping(method = RequestMethod.POST) 的縮寫
@PathVariable: 獲取 url 中的數據
@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser/{uid}")
publicString getUser(@PathVariable("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}
請求示例:http://localhost:8080/User/getUser/123
@Controller
@RequestMapping("/User")
publicclassHelloWorldController{
@RequestMapping("/getUser")
publicString getUser(@RequestParam("uid")Integer id, Model model) {
System.out.println("id:"+id);
return"user";
}
}
請求示例:http://localhost:8080/User/getUser?uid=123
@Repository DAO 層注解,DAO 層中接口繼承 JpaRepository, 需要在 build.gradle 中引入相關 jpa 的一個 jar 自動加載。
Repository 注解源碼
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceRepository{
@AliasFor(annotation = Component.class)
String value() default"";
}
@Service
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public@interfaceService{
@AliasFor(annotation = Component.class)
String value() default"";
}
@Service 是 @Component 注解的一個特例,作用在類上 @Service 注解作用域默認為單例 使用注解配置和類路徑掃描時,被 @Service 注解標注的類會被 Spring 掃描并注冊為 Bean @Service 用于標注服務層組件, 表示定義一個 bean @Service 使用時沒有傳參數,Bean 名稱默認為當前類的類名,首字母小寫 @Service(“serviceBeanId”) 或 @Service(value=”serviceBeanId”) 使用時傳參數,使用 value 作為 Bean 名字 @Scope 作用域注解 @Scope 作用在類上和方法上,用來配置 spring bean 的作用域,它標識 bean 的作用域
@Scope 源碼
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceScope{
@AliasFor("scopeName")
String value() default"";
@AliasFor("value")
String scopeName() default"";
ScopedProxyMode proxyMode() defaultScopedProxyMode.DEFAULT;
}
value
singleton 表示該 bean 是單例的。(默認)
prototype 表示該 bean 是多例的,即每次使用該 bean 時都會新建一個對象。
request 在一次 http 請求中,一個 bean 對應一個實例。
session 在一個 httpSession 中,一個 bean 對應一個實例。
proxyMode
DEFAULT 不使用代理。(默認)
NO 不使用代理,等價于 DEFAULT。
INTERFACES 使用基于接口的代理 (jdk dynamic proxy)。
TARGET_CLASS 使用基于類的代理 (cglib)。
@Entity 實體類注解
@Table(name ="數據庫表名"),這個注解也注釋在實體類上,對應數據庫中相應的表。
@Id、@Column 注解用于標注實體類中的字段,pk 字段標注為 @Id,其余 @Column。
@Bean 產生一個 bean 的方法
@Bean 明確地指示了一種方法,產生一個 bean 的方法,并且交給 Spring 容器管理。支持別名 @Bean("xx-name")
@Autowired 自動導入
@Autowired 注解作用在構造函數、方法、方法參數、類字段以及注解上
@Autowired 注解可以實現 Bean 的自動注入
@Component 把普通 pojo 實例化到 spring 容器中,相當于配置文件中的
雖然有了 @Autowired, 但是我們還是要寫一堆 bean 的配置文件, 相當麻煩, 而 @Component 就是告訴 spring, 我是 pojo 類, 把我注冊到容器中吧, spring 會自動提取相關信息。那么我們就不用寫麻煩的 xml 配置文件了
引入單個 properties 文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties"})
引入多個 properties 文件:
@PropertySource(value = {"classpath : xxxx/xxx.properties","classpath : xxxx.properties"})
可以額外分為兩種模式 相對路徑 classpath,絕對路徑(真實路徑)file
注意:單文件可以不寫 value 或 locations,value 和 locations 都可用
相對路徑(classpath)
引入單個 xml 配置文件:@ImportSource("classpath : xxx/xxxx.xml")
引入多個 xml 配置文件:@ImportSource(locations={"classpath : xxxx.xml" , "classpath : yyyy.xml"})
絕對路徑(file)
引入單個 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/dubbo.xml"})
引入多個 xml 配置文件:@ImportSource(locations= {"file : d:/hellxz/application.xml" , "file : d:/hellxz/dubbo.xml"})
@Value("${properties 中的鍵}") private String xxx;
功能類似 XML 配置的,用來導入配置類,可以導入帶有 @Configuration 注解的配置類或實現了 ImportSelector/ImportBeanDefinitionRegistrar。
使用示例
@SpringBootApplication@Import({SmsConfig.class})publicclassDemoApplication{publicstaticvoid main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}
在 Spring 中,事務有兩種實現方式,分別是編程式事務管理和聲明式事務管理兩種方式
編程式事務管理:編程式事務管理使用 TransactionTemplate 或者直接使用底層的 PlatformTransactionManager。對于編程式事務管理,spring 推薦使用 TransactionTemplate。聲明式事務管理:建立在 AOP 之上的。其本質是對方法前后進行攔截,然后在目標方法開始之前創建或者加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務,通過 @Transactional 就可以進行事務操作,更快捷而且簡單。推薦使用
@ControllerAdvice 統一處理異常
@ControllerAdvice 注解定義全局異常處理類
@ControllerAdvice
publicclassGlobalExceptionHandler{
}
@ExceptionHandler注解聲明異常處理方法
@ControllerAdvice
publicclassGlobalExceptionHandler{
@ExceptionHandler(Exception.class)
@ResponseBody
String handleException(){
return"Exception Deal!";
}
}
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計