Spring常用註解
@SpringBootApplication:
包含了@ComponentScan、@Configuration和@EnableAutoConfiguration註解。其中@ComponentScan讓pringBoot掃描到Configuration類並把它加入到程序上下文。
@Configuration:
指出該類是 Bean 配置的信息源,相當於XML中的<beans></beans>,一般加在主類上。
@EnableAutoConfiguration:
讓 Spring Boot 根據應用所聲明的依賴來對 Spring 框架進行自動配置,一般加在主類上。
@ComponentScan:
組件掃描。個人理解相當於<context:component-scan>,如果掃描到有@Component @Controller @Service等這些註解的類,則把這些類註冊爲bean。
通常用在主類上。
@ImportResource註解(裝載多個配置文件),
@EnableWebMvc 可以使用mvc
@MapperScan(basePackages = "com.hellowin.b2c.persistence.mapper")
早點的時間是直接在Mapper類上面添加註解@Mapper,這種方式要求每一個mapper類都需要添加此註解,比較麻煩。
現在通過使用@MapperScan可以指定要掃描的Mapper類的包的路徑
@EnableCaching註解是spring framework中的註解驅動的緩存管理功能。自spring版本3.1起加入了該註解。如果你使用了這個註解,那麼你就不需要在XML文件中配置cache manager了。
當你在配置類(@Configuration)上使用@EnableCaching註解時,會觸發一個post processor,這會掃描每一個spring bean,查看是否已經存在註解對應的緩存。如果找到了,就會自動創建一個代理攔截方法調用,使用緩存的bean執行處理。
要實現計劃任務,首先通過在配置類註解@EnableScheduling來開啓對計劃任務的支持,然後在要執行計劃任務的方法上註解@Scheduled,聲明這是一個計劃任務。Spring通過@Scheduled支持多種類型的計劃任務,包含cron、fixDelay、fixRate等。
@Component:
泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
@Component可配合CommandLineRunner使用,在程序啓動後執行一些基礎任務。
實際應用中,我們會有在項目服務啓動的時候就去加載一些數據或做一些事情這樣的需求。爲了解決這樣的問題,Spring Boot 爲我們提供了一個方法,通過實現接口 CommandLineRunner 來實現。
@Repository:-->@Mapper
用於標註數據訪問組件,即DAO組件。
@Service:
用於標註業務層組件。
@RestController:
用於標註控制層組件(如struts中的action),包含@Controller和@ResponseBody。
@Controller:註解在類上,表示這是一個控制層bean
@ResponseBody:
表示該方法的返回結果直接寫入HTTP response body中
一般在異步獲取數據時使用,在使用@RequestMapping後,返回值通常解析爲跳轉路徑,加上@responsebody後返回結果不會被解析爲跳轉路徑,而是直接寫入HTTP response body中。比如異步獲取json數據,加上@responsebody後,會直接返回json數據。
@Bean:
相當於XML中的<bean></bean>,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。
@AutoWired:
byType方式。把配置好的Bean拿來用,完成屬性、方法的組裝,它可以對類成員變量、方法及構造函數進行標註,完成自動裝配的工作。
當加上(required=false)時,就算找不到bean也不報錯。
@Resource(name="name",type="type"):
沒有括號內內容的話,默認byName。與@Autowired幹類似的事。
@Resource默認按照名稱方式進行bean匹配,@Autowired默認按照類型方式進行bean匹配
@Qualifier:
當有多個同一類型的Bean時,可以用@Qualifier("name")來指定。與@Autowired配合使用
@Autowired默認是根據類型進行注入的,因此如果有多個類型一樣的Bean候選者,則需要限定其中一個候選者,否則將拋出異常
@Qualifier限定描述符除了能根據名字進行注入,更能進行更細粒度的控制如何選擇候選者
@RequestMapping:
RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的所有響應請求的方法都是以該地址作爲父路徑。
該註解有六個屬性:
params:指定request中必須包含某些參數值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
value:指定請求的實際地址,指定的地址可以是URI Template 模式
method:指定請求的method類型, GET、POST、PUT、DELETE等
consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回
@Profiles
Spring Profiles提供了一種隔離應用程序配置的方式,並讓這些配置只能在特定的環境下生效。
任何@Component或@Configuration都能被@Profile標記,從而限制加載它的時機。
@Configuration @Profile("prod") public class ProductionConfiguration { // ... }
@ConfigurationProperties
Spring Boot將嘗試校驗外部的配置,默認使用JSR-303(如果在classpath路徑中)。
你可以輕鬆的爲你的@ConfigurationProperties類添加JSR-303 javax.validation約束註解:
@Component @ConfigurationProperties(prefix="connection") public class ConnectionSettings { @NotNull private InetAddress remoteAddress; // ... getters and setters }
全局異常處理
@ControllerAdvice:包含@Component。可以被掃描到。統一處理異常。
@ExceptionHandler(Exception.class):
用在方法上面表示遇到這個異常就執行以下方法。
@Lazy(true): 延遲初始化
@WebServlet(name="Servlet3FirstDemo",value="/Servlet3FirstDemo")
@WebFilter將一個實現了javax.servlet.Filte接口的類定義爲過濾器
第三方servlet:使用ServletRegistrationBean來注入servlet,對於每一個servlet都有一個ServletRegistrationBean來注入。
@Scope:註解在類上,描述spring容器如何創建Bean實例。
@ConfigurationProperties(prefix = "env")與@Component組合使用可以將application.properties文件中帶env前綴的變量導入EnvConfig類中
public class EnvConfig {
private String online;
private String environment;
}
JPA註解
@Entity 標註用於實體類聲明語句之前,指出該Java 類爲實體類,將映射到指定的數據庫表。如聲明一個實體類 Customer,它將映射到數據庫中的 customer 表上。
@Table當實體類與其映射的數據庫表名不同名時需要使用 @Table 標註說明,該標註與 @Entity 標註並列使用,置於實體類聲明語句之前,可寫於單獨語句行,也可與聲明語句同行。
@Table(name="JPA_CUSTOMERS")//主要是映射表名對應的數據庫表名JPA_CUSTOMER默認情況下可以不寫表名與持久化類名相同 @Entity //表明這是一個持久化類
public class Customer {}
@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。該屬性通常置於屬性聲明語句之前,可與聲明語句同行,也可寫在單獨行上。 @Id標註也可置於屬性的getter方法之前。
@GeneratedValue用於標註主鍵的生成策略,通過 strategy 屬性指定。默認情況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應 identity,MySQL 對應 auto increment。 在 javax.persistence.GenerationType 中定義了以下幾種可供選擇的策略:
IDENTITY:採用數據庫 ID自增長的方式來自增主鍵字段,Oracle 不支持這種方式;
AUTO: JPA自動選擇合適的策略,是默認選項;
SEQUENCE:通過序列產生主鍵,通過 @SequenceGenerator 註解指定序列名,MySql 不支持這種方式
TABLE:通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。
@Basic表示一個簡單的屬性到數據庫表的字段的映射,對於沒有任何標註的 getXxxx() 方法,默認即爲
@Basic fetch: 表示該屬性的讀取策略,有 EAGER 和 LAZY 兩種,分別表示主支抓取和延遲加載,默認爲 EAGER.
optional:表示該屬性是否允許爲null, 默認爲true
6、@Column當實體的屬性與其映射的數據庫表的列不同名時需要使用@Column 標註說明,該屬性通常置於實體的屬性聲明語句之前,還可與 @Id 標註一起使用。
@Column 標註的常用屬性是 name,用於設置映射數據庫表的列名。此外,該標註還包含其它多個屬性,如:unique 、nullable、length 等。
@Column 標註的 columnDefinition 屬性: 表示該字段在數據庫中的實際類型.通常 ORM 框架可以根據屬性類型自動判斷數據庫中字段的類型,但是對於Date類型仍無法確定數據庫中字段類型究竟是DATE,TIME還是TIMESTAMP.此外,String的默認映射類型爲VARCHAR, 如果要將 String 類型映射到特定數據庫的 BLOB 或TEXT 字段類型.
@Column標註也可置於屬性的getter方法之前
SpringBoot的依賴和描述
將看到的Spring Boot依賴記錄下來;
下列dependency採用從父依賴繼承版本的方式:Spring Boot 父依賴如下:
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.6.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
SpringBoot的依賴和其描述及其dependency:
1)名稱 : spring-boot-starter
描述:核心Spring Boot starter ,包括自動配置支持,日誌和YAML;
2)名稱 :spring-boot-starter-actuator
描述:生產準備的特性,用於幫你監控和管理應用;
pom:
- <!--從父依賴那繼承版本號,下面省略此註釋-->
- <!--生產準備的特性,用於幫你監控和管理應用 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId>
- </dependency>
3)名稱 :spring-boot-starter-amqp
描述:對高級消息隊列協議的支持,通過spring-rabbit實現;
pom:
- <!--對高級消息隊列協議的支持,通過SpringBoot-rabbit實現 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-amqp</artifactId>
- </dependency>
4)名稱 :spring-boot-starter-aop
描述:對面向切面變成的支持,通過spring-aop和AspectJ
pom:
- <!--對面向切面變成的支持,通過spring-aop和AspectJ -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-aop</artifactId>
- </dependency>
5)名稱 :spring-boot-starter-batch
描述:對Spring batch 的支持,包括HSQLDB數據庫
pom:
- <!--對Spring batch 的支持,包括HSQLDB數據庫 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-batch</artifactId>
- </dependency>
6)名稱 :spring-boot-starter-cloud-connection
描述:對Spring Cloud Connection的支持,簡化在雲平臺下(例如,Cloud Foundry和Heroku)服務的連接;
7)名稱 :spring-boot-starter-elasticsearch
描述:對Elasticsearche搜索和分析引擎的支持,包括spring-data-elasticsearch;
8)名稱 :spring-boot-starter-data-gemfire
描述:對GemFire分佈式數據存儲的支持,包括spring-data-gemfire;
pom:
- <!--對GemFire分佈式數據存儲的支持,包括spring-data-gemfire-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-gemfire</artifactId>
- </dependency>
9)名稱 :spring-boot-starter-data-jpa
描述:對java持久化API的支持,包括Spring-data-jpa,spring-orm和Hibernate;
pom:
- <!--對java持久化API的支持,包括Spring-data-jpa,spring-orm和Hibernate-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-jpa</artifactId>
- </dependency>
10)名稱 :spring-boot-starter-data-mongodb
描述:對MongoDB NOSQL數據庫的支持,包括spring-data-mongodb;
pom:
- <!--對MongoDB NOSQL數據庫的支持,包括spring-data-mongodb-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-mongodb</artifactId>
- </dependency>
11)名稱 :spring-boot-starter-data-rest
描述:通過對REST暴露Spring data倉庫的支持,通過spring-data-rest-webmvc實現;
pom:
- <!--通過對REST暴露Spring data倉庫的支持,通過Spring-data-rest-webmvc實現-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-rest</artifactId>
- </dependency>
12)名稱 :spring-boot-starter-data-solr
描述:對Apache Solr搜索平臺的支持,包括spring-data-solr;
pom:
- <!--對Apache Solr搜索平臺的支持,包括spring-data-solr-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-solr</artifactId>
- </dependency>
13)名稱 :spring-boot-starter-freemaker
描述:對FreeMarker模板引擎的支持;
pom:
- <!--對FreeMarker模板引擎的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-freemarker</artifactId>
- </dependency>
14)名稱 :spring-boot-starter-Groovy
描述:對Groovy模板引擎的支持;
15)名稱 :spring-boot-starter-hateoas
描述:對基於HATEOAS的RESTful服務的支持,通過spring-hateoas;
pom:
- <!--對基於HATEOAS的RESTful服務的支持,通過Spring-hateoas;-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-hateoas</artifactId>
- </dependency>
16)名稱 :spring-boot-starter-integration
描述:對普通spring-integration模塊的支持;
pom:
- <!--對普通Spring-integration模塊的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-integration</artifactId>
- </dependency>
17)名稱 :spring-boot-starter-hornetq
描述:對”java消息服務API”的支持,通過HornetQ實現;
18)名稱 :spring-boot-starter-jdbc
描述:對JDBC數據庫的支持;
pom:
- <!--對JDBC數據庫的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
19)名稱 :spring-boot-starter-jersey
描述:對Jersey RESTful Web服務框架的支持;
pom:
- <!--對Jersey RESTful Web服務框架的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jersey</artifactId>
- </dependency>
20)名稱 :spring-boot-starter-jta-atomikos
描述:對JTA分佈式事務的支持。通過Atomikos實現;
pom:
- <!--對JTA分佈式事務的支持,通過Atomikos-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jta-atomikos</artifactId>
- </dependency>
21)名稱 :spring-boot-starter-jta-bitronix
描述:對JTA分佈式事務的支持,通過Bitronix實現;
pom:
- <!--對JTA分佈式事務的支持,通過Bitronix實現-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jta-bitronix</artifactId>
- </dependency>
22)名稱 :spring-boot-starter-mail
描述:對javax.mail的支持;
pom:
- <!--對javax.mail的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mail</artifactId>
- </dependency>
23)名稱 :spring-boot-starter-mobile
描述:對spring-mobile的支持;
pom:
- <!--對spring-mobile的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-mobile</artifactId>
- </dependency>
24)名稱 :spring-boot-starter-redis
描述:對REDIS鍵值數據存儲的支持,包括Spring-redis;
25)名稱 :spring-boot-starter-security
描述:對spring -security模板引擎的支持;
pom:
- <!--對spring -security模板引擎的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
26)名稱 :spring-boot-starter-social-facebook
描述:對spring-social-facebook的支持;
pom:
- <!--對spring-social-facebook的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-social-facebook</artifactId>
- </dependency>
27)名稱 :spring-boot-starter-social-twitter
描述:對spring-social-twitter的支持;
pom:
- <!--對spring-social-twitter的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-social-twitter</artifactId>
- </dependency>
28)名稱 :spring-boot-starter-test
描述:對常用測試依賴的支持,包括JUnit,Hamcrest和Mockito還有spring-test模塊;
pom:
- <!--對常用測試依賴的支持,包括JUnit,Hamcrest和Mockito還有Spring-test模塊-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
29)名稱 :spring-boot-starter-thymeleaf
描述:對Thymeleaf模板引擎的支持,包括和Spring的集成;
pom:
- <!--對Thymeleaf模板引擎的支持,包括和Spring的集成-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
30)名稱 :spring-boot-starter-velocity
描述:對velocity模板引擎的支持;
31)名稱 :spring-boot-starter-web
描述:對全棧web開發的支持,包括Tomcat和spring-webmvc;
pom:
- <!--對全棧web開發的支持,包括Tomcat和spring-webmvc-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
32)名稱 :spring-boot-starter-websocket
描述:對websocket開發的支持;
pom:
- <!--對websocket開發的支持-->
- <dependency>
- <artifactId>spring-boot-starter-websocket</artifactId>
- </dependency>
33)名稱 :spring-boot-starter-ws
描述:對Spring web服務的支持;
最後,Spring Boot包含一些可用於排除或交換具體技術方面的starters;
34)名稱 :spring-boot-starter-jetty
描述:導入Jetty HTTP引擎(作爲Tomcat的代替);
pom:
- <!--導入Jetty HTTP引擎(作爲Tomcat的代替-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jetty</artifactId>
- </dependency>
35)名稱 :spring-boot-starter-logging
描述:對Log4J日誌系統的支持;
pom:
- <!--對Log4J日誌系統的支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-log4j</artifactId>
- </dependency>
36)名稱 :spring-boot-starter-logging
pom:
- <!--導入SpringBoot的默認日誌系統(Logback-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-logging</artifactId>
- </dependency>
- 2
37)名稱 :spring-boot-starter-tomcat
描述:導入SpringBoot的默認HTTP引擎(Tomcat);
pom:
- <!--導入SpringBoot的默認HTTP引擎(Tomcat-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- </dependency>
38)名稱 :spring-boot-starter-undertow
描述:導入Undertow HTTP引擎(作爲tomcat的代替);
pom:
- <!--導入Undertow HTTP引擎(作爲tomcat的代替-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-undertow</artifactId>
- </dependency>