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