spring和springboot常用注解總結


原文鏈接:http://www.cnblogs.com/tinyj/p/9786013.html

https://blog.csdn.net/yitian_66/article/details/80866571

@ConfigurationProperties
可以非常方便的把資源文件中的內容綁定到對象上

首先在配置文件里面,這些信息是這樣子滴

connection.username=admin
connection.password=kyjufskifas2jsfs
connection.remoteAddress=192.168.1.1

這時候我們可以定義一個實體類在裝載配置文件信息

@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {

    private String username;
    private String remoteAddress;
    private String password ;

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getRemoteAddress() {
        return remoteAddress;
    }
    public void setRemoteAddress(String remoteAddress) {
        this.remoteAddress = remoteAddress;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

我們還可以把@ConfigurationProperties還可以直接定義在@bean的注解上,這是bean實體類就不用@Component和@ConfigurationProperties了

@SpringBootApplication
public class DemoApplication{

    //...

    @Bean
    @ConfigurationProperties(prefix = "connection")
    public ConnectionSettings connectionSettings(){
        return new ConnectionSettings();

    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
 
@Value("${app.name}")
注入簡單值

 

@Import

通過導入的方式實現把實例加入springIOC容器中

/**
 * 定義一個圓形
 *
 * @author zhangqh
 * @date 2018年5月1日
 */
public class Circular {
}
/**
 * 定義一個正方形
 *
 * @author zhangqh
 * @date 2018年5月1日
 */
public class Square {
}

 

MainConfig注解配置中增加@Import注解如下:

@Import({Square.class,Circular.class})
@Configuration
public class MainConfig{
}

 

AnnotationConfigApplicationContext applicationContext2 = new AnnotationConfigApplicationContext(MainConfig.class);
String[] beanNames = applicationContext2.getBeanDefinitionNames();
for(int i=0;i<beanNames.length;i++){
    System.out.println("bean名稱為==="+beanNames[i]);
}

 

運行結果:

bean名稱為===mainConfig
bean名稱為===com.zhang.bean.Square
bean名稱為===com.zhang.bean.Circular

 

@RequestMapping

這個注解可以用於類和方法上,用於類上,表示父路徑,如類上是demo,方法上是/demo1,那么訪問路徑就是demo/demo1

該注解有六個屬性:
params:指定request中必須包含某些參數值是,才讓該方法處理。
headers:指定request中必須包含某些指定的header值,才能讓該方法處理請求。
value:指定請求的實際地址,指定的地址可以是URI Template 模式
method:指定請求的method類型, GET、POST、PUT、DELETE等,這個不寫的話,自適應:get或者post
consumes:指定處理請求的提交內容類型(Content-Type),如application/json,text/html;
produces:指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回

當然也可以使用@GetMapping@PostMapping@PutMapping@DeleteMapping

@PathVariable

對應路徑上的變量,用在參數前,路徑上的變量名需和參數名稱一致

RequestMapping("demo/demo1/{name}")
public String say(@PathVariable String name){
  
}

 

@RequestHeader
@ApiOperation(value = "更新用戶", notes = "更新用戶")
@PutMapping("/user/updateUser")
public void updateUser(@RequestHeader("Authorization") String authorization);

 

 

@RequestParam

URL是這樣的:http://host:port/path?參數名=參數值,和以下代碼的作用相同

String name =request.getParameter("name ")。當請求參數username不存在時會有異常發生,可以通過設置屬性required=false解決

 

@RequestBody

是指方法參數被綁定到HTTP請求Body上,前端就不能用表單的方式提交了,需要用json的方式提交。

@RequestMapping(value = "/something", method = RequestMethod.PUT)
public void handle(@RequestBody String body,@RequestBody User user){
//可以綁定自定義的對象類型
}

@ResponseBody

表示輸出的是json格式的數據。表示該方法的返回的結果直接寫入 HTTP 響應正文(ResponseBody)中,一般在異步獲取數據時使用,通常是在使用 @RequestMapping 后,返回值通常解析為跳轉路徑,加上@Responsebody 后返回結果不會被解析為跳轉路徑,而是直接寫入HTTP 響應正文中。

 

@ModelAttribute

1.運用在參數上,會將客戶端傳遞過來的參數按名稱注入到指定對象中,並且會將這個對象自動加入ModelMap中,便於View層使用;

2.運用在方法上,會在每一個@RequestMapping標注的方法前執行,如果有返回值,則自動將該返回值加入到ModelMap中;

 

@Bean

相當於XML中的<bean></bean>,放在方法的上面,而不是類,意思是產生一個bean,並交給spring管理。

 

@Qualifier

當有多個同一類型的Bean時,可以用@Qualifier("name")來指定。與@Autowired配合使用,自動注入的策略就從 byType 轉變byName 了

 

@Autowired

屬於Spring 的org.springframework.beans.factory.annotation包下,可用於為類的屬性、構造器、方法進行注值 ,

按類型注入.默認屬性required= true;當不能確定 Spring 容器中一定擁有某個類的Bean 時, 可以在需要自動注入該類 Bean 的地方可以使用 @Autowired(required = false), 這等於告訴Spring:在找不到匹配Bean時也不拋出BeanCreationException 異常。

@Resource

不屬於spring的注解,而是來自於JSR-250位於java.annotation包下,使用該annotation為目標bean指定協作者Bean。 按名稱裝配

@Resource的作用相當於@Autowired,均可標注在字段或屬性的setter方法上。 

注意:

@Autowired注解默認按照類型裝配,如果容器中包含多個同一類型的Bean,那么啟動容器時會報找不到指定類型bean的異常,解決辦法是結合@Qualified注解進行限定,指定注入的bean名稱。

@Resource如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴對象時, @Resource注解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配了。

@Autowired注解進行裝配容易拋出異常,特別是裝配的bean類型有多個的時候,而解決的辦法是需要在增加@Qualitied進行限定。

 

組件類注解

@Component :標准一個普通的spring Bean類。 value不寫默認就是類名首字母小寫
@Repository:標注一個DAO組件類。 
@Service:標注一個業務邏輯組件類。 
@Controller:標注一個控制器組件類。 

@Component可以代替@Repository、@Service、@Controller,因為這三個注解是被@Component標注的。被注解的java類當做Bean實例,Bean實例的名稱默認是Bean類的首字母小寫,其他部分不變。@Service也可以自定義Bean名稱,但是必須是唯一的!

 

@SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan
通常用在啟動類上。

 

@ComponentScan

組件掃描。如果掃描到有@Component @Controller @Service等這些注解的類,則把這些類注冊為bean。

 

@Configuration

指出該類是 Bean 配置的信息源,相當於XML中的<beans></beans>,一般加在主類上。

 

@EnableAutoConfiguration

讓 Spring Boot 根據應用所聲明的依賴來對 Spring 框架進行自動配置,一般加在主類上。

啟用 Spring 應用程序上下文的自動配置,試圖猜測和配置您可能需要的bean。自動配置類通常采用基於你的classpath 和已經定義的 beans 對象進行應用。被 @EnableAutoConfiguration 注解的類所在的包有特定的意義,並且作為默認配置使用。通常推薦將 @EnableAutoConfiguration 配置在 root 包下,這樣所有的子包、類都可以被查找到。

 

@Scope:注解在類上,描述spring容器如何創建Bean實例。

1)singleton 表示在spring容器中的單例,通過spring容器獲得該bean時總是返回唯一的實例

2)prototype:表示每次獲得bean都會生成一個新的對象

3)request:表示在一次http請求內有效(只適用於web應用)

4)session:表示在一個用戶會話內有效(只適用於web應用)

5)globalSession:表示在全局會話內有效(只適用於web應用)

在多數情況,我們只會使用singleton和prototype兩種scope,如果未指定scope屬性,默認為singleton

@RestController  是一個結合了 @ResponseBody @Controller 的注解

@suppresswarnings 抑制警告

@Modifying 如果是增,改,刪加上此注解

1:方法的返回值應該是int,表示更新語句所影響的行數。

2:在調用的地方必須加事務,沒有事務不能正常執行

@Transactional  事務注解

@Query 自定義查詢語句 JPQL

@Entity

@Table(name=“”):注解在類上表明這是一個實體類。一般用於jpa這兩個注解一般一塊使用,但是如果表名和實體類名相同的話,@Table可以省略

@Column:通過@Column注解設置,包含的設置如下 

name:數據庫表字段名 

unique:是否唯一 

nullable:是否可以為空 

Length:長度

inserttable:是否可以插入 

updateable:是否可以更新 

columnDefinition: 定義建表時創建此列的DDL 

secondaryTable: 從表名。如果此列不建在主表上(默認建在主表),該屬性定義該列所在從表的名字。 

@Column(name = "user_code", nullable = false, length=32)//設置屬性userCode對應的字段為user_code,長度為32,非空     

private String userCode;     

@Column(name = "user_wages", nullable = true, precision=12,scale=2)//設置屬性wages對應的字段為user_wages,12位數字可保留兩位小數,可以為空     

private double wages;   

@Id:表示該屬性為主鍵。

@Temporal(TemporalType.DATE)//設置為時間類型     

private Date joinDate; 

@Transient:表示該屬性並非一個到數據庫表的字段的映射,ORM框架將忽略該屬性。如果一個屬性並非數據庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為@Basic。@Basic(fetch=FetchType.LAZY):標記可以指定實體屬性的加載方式

@JsonIgnore:作用是json序列化時將Java bean中的一些屬性忽略掉,序列化和反序列化都受影響。

@JoinColumn(name=”loginId”):一對一:本表中指向另一個表的外鍵。一對多:另一個表指向本表的外鍵。

@OneToOne@OneToMany@ManyToOne:對應hibernate配置文件中的一對一,一對多,多對一。

@GeneratedValue 用於標注主鍵的生成策略,通過 strategy 屬性指定。默認情況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer 對應 identity,MySQL 對應 auto increment javax.persistence.GenerationType 中定義了以下幾種可供選擇的策略:

IDENTITY:采用數據庫 ID自增長的方式來自增主鍵字段,Oracle 不支持這種方式;

AUTO: JPA自動選擇合適的策略,是默認選項;

SEQUENCE:通過序列產生主鍵,通過 @SequenceGenerator 注解指定序列名,MySql 不支持這種方式

TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易於數據庫移植。

@Profile
Spring Profile提供了一種隔離應用程序配置的方式,並讓這些配置只能在特定的環境下生效。
任何@Component或@Configuration都能被@Profile標記,從而限制加載它的時機。

@Configuration
@Profile("prod")
public class ProductionConfiguration {
    // ...
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM