1. 程式人生 > 其它 >SpringBoot常用註解整理

SpringBoot常用註解整理

@SpringBootApplication
定義在main方法入口類處,用於啟動sping boot應用專案

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Configuration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {

	/**
	 * Exclude specific auto-configuration classes such that they will never be applied.
	 * @return the classes to exclude
	 */
	Class<?>[] exclude() default {};

}

@EnableAutoConfiguration 讓spring boot根據類路徑中的jar包依賴當前專案進行自動配置 在src/main/resources的META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
若有多個自動配置,用“,”隔開

@ImportResource
載入XML檔案,一般是放在啟動main類上

@ImportResource("classpath*:/spring/*.xml")  單個
@ImportResource({"classpath*:/spring/1.xml","classpath*:/spring/2.xml"})   多個

@Value
application.properties定義屬性,直接使用@Value注入即可

public class A{
	 @Value("${push.start:0}")    如果缺失,預設值為0
     private Long  id;
}

@ConfigurationProperties(prefix="person")
可以新建一個properties檔案,ConfigurationProperties的屬性prefix指定properties的配置的字首,通過location指定properties檔案的位置

@ConfigurationProperties(prefix="person")
public class PersonProperties {
	
	private String name ;
	private int age;
}

@EnableConfigurationProperties
用 @EnableConfigurationProperties註解使 @ConfigurationProperties生效,並從IOC容器中獲取bean
相關部落格:https://blog.csdn.net/u010502101/article/details/78758330
@RestController
組合@Controller和@ResponseBody,當你開發一個和頁面互動資料的控制時,比如bbs-web的api介面需要此註解
@RequestMapping("/api2/copper")
用來對映web請求(訪問路徑和引數)、處理類和方法,可以註解在類或方法上。註解在方法上的路徑會繼承註解在類上的路徑。
produces屬性: 定製返回的response的媒體型別和字符集,或需返回值是json物件

@RequestMapping(value="/api2/copper",produces="application/json;charset=UTF-8",method = RequestMethod.POST)

@RequestParam
獲取request請求的引數值

 public List<CopperVO> getOpList(HttpServletRequest request,
                                    @RequestParam(value = "pageIndex", required = false) Integer pageIndex,
                                    @RequestParam(value = "pageSize", required = false) Integer pageSize) {
 
  }

@ResponseBody
支援將返回值放在response體內,而不是返回一個頁面。比如Ajax介面,可以用此註解返回資料而不是頁面。此註解可以放置在返回值前或方法前。

另一個玩法,可以不用@ResponseBody。
繼承FastJsonHttpMessageConverter類並對writeInternal方法擴充套件,在spring響應結果時,再次攔截、加工結果
// stringResult: json返回結果
//HttpOutputMessage outputMessage

 byte[] payload = stringResult.getBytes();
 outputMessage.getHeaders().setContentType(META_TYPE);
 outputMessage.getHeaders().setContentLength(payload.length);
 outputMessage.getBody().write(payload);
 outputMessage.getBody().flush();

@Bean
@Bean(name="bean的名字",initMethod="初始化時呼叫方法名字",destroyMethod="close")
定義在方法上,在容器內初始化一個bean例項類

@Bean(destroyMethod="close")
@ConditionalOnMissingBean
public PersonService registryService() {
		return new PersonService();
	}

@Service
用於標註業務層元件
@Controller
用於標註控制層元件(如struts中的action)
@Repository
用於標註資料訪問元件,即DAO元件
@Component
泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註。
@PostConstruct
spring容器初始化時,要執行該方法

@PostConstruct  
public void init() {   
}   

@PathVariable
用來獲得請求url中的動態引數

@Controller  
public class TestController {  

     @RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)  
     public String getLogin(@PathVariable("userId") String userId,  
         @PathVariable("roleId") String roleId){
           
         System.out.println("User Id : " + userId);  
         System.out.println("Role Id : " + roleId);  
         return "hello";  
     
     }  
}

@ComponentScan
註解會告知Spring掃描指定的包來初始化Spring

@ComponentScan(basePackages = "com.bbs.xx")

@EnableZuulProxy
路由閘道器的主要目的是為了讓所有的微服務對外只有一個介面,我們只需訪問一個閘道器地址,即可由閘道器將所有的請求代理到不同的服務中。Spring Cloud是通過Zuul來實現的,支援自動路由對映到在Eureka Server上註冊的服務。Spring Cloud提供了註解@EnableZuulProxy來啟用路由代理
@Autowired
在預設情況下使用 @Autowired 註釋進行自動注入時,Spring 容器中匹配的候選 Bean 數目必須有且僅有一個。當找不到一個匹配的 Bean 時,Spring 容器將丟擲 BeanCreationException 異常,並指出必須至少擁有一個匹配的 Bean
當不能確定 Spring 容器中一定擁有某個類的 Bean 時,可以在需要自動注入該類 Bean 的地方可以使用 @Autowired(required = false),這等於告訴 Spring: 在找不到匹配 Bean 時也不報錯
@Autowired註解注入map、list與@Qualifier
部落格地址:https://blog.csdn.net/ethunsex/article/details/66475792
@Configuration

@Configuration("name")//表示這是一個配置資訊類,可以給這個配置類也起一個名稱
@ComponentScan("spring4")//類似於xml中的<context:component-scan base-package="spring4"/>
public class Config {

    @Autowired//自動注入,如果容器中有多個符合的bean時,需要進一步明確
    @Qualifier("compent")//進一步指明注入bean名稱為compent的bean
    private Compent compent;

    @Bean//類似於xml中的<bean id="newbean" class="spring4.Compent"/>
    public Compent newbean(){
        return new Compent();
    }   
}

@Import(Config1.class)
匯入Config1配置類裡實例化的bean

@Configuration
public class CDConfig {

    @Bean   // 將SgtPeppers註冊為 SpringContext中的bean
    public CompactDisc compactDisc() {
        return new CompactDisc();  // CompactDisc型別的
    }
}

@Configuration
@Import(CDConfig.class)  //匯入CDConfig的配置
public class CDPlayerConfig {

    @Bean(name = "cDPlayer")
    public CDPlayer cdPlayer(CompactDisc compactDisc) {  
         // 這裡會注入CompactDisc型別的bean
         // 這裡注入的這個bean是CDConfig.class中的CompactDisc型別的那個bean
        return new CDPlayer(compactDisc);
    }
}

@Order
@Order(1),值越小優先順序超高,越先執行
@ConditionalOnExpression

@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {
    @Bean
    public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
        return new OrderMessageMonitor(configContext);
    }
}

開關為true的時候才例項化bean
@ConditionalOnProperty
這個註解能夠控制某個 @Configuration 是否生效。具體操作是通過其兩個屬性name以及havingValue來實現的,其中name用來從application.properties中讀取某個屬性值,如果該值為空,則返回false;如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。如果返回值為false,則該configuration不生效;為true則生效
部落格地址:https://blog.csdn.net/dalangzhonghangxing/article/details/78420057
@ConditionalOnClass
該註解的引數對應的類必須存在,否則不解析該註解修飾的配置類

@Configuration
@ConditionalOnClass({Gson.class})
public class GsonAutoConfiguration {
    public GsonAutoConfiguration() {
    }

    @Bean
    @ConditionalOnMissingBean
    public Gson gson() {
        return new Gson();
    }
}

@ConditionalOnMisssingClass({ApplicationManager.class})
如果存在它修飾的類的bean,則不需要再建立這個bean
@ConditionOnMissingBean(name = "example")
表示如果name為“example”的bean存在,該註解修飾的程式碼塊不執行

本文來自部落格園,作者:IT波少,轉載請註明原文連結:https://www.cnblogs.com/swpu-wxb/p/15132314.html