SpringBoot常用注解總結(jié)
一、啟動(dòng)相關(guān)
1、@SpringBootApplication
SpringBootApplication注解:
- @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 @interface SpringBootApplication {
在SpirngBoot啟動(dòng)類里面,都加入了此啟動(dòng)注解,此注解是個(gè)組合注解,三個(gè)比較重要的:
@SpringBootConfiguration 繼承至@Configuration,其實(shí)兩種功能一致,都是標(biāo)注該類為配置類
@EnableAutoConfiguration 這個(gè)注解是SpirngBoot自動(dòng)配置的核心所在,通過(guò)此注解,能所有符合自動(dòng)配置條件的bean的定義加載到spring容器中。
@ComponentScan 該注解會(huì)掃描當(dāng)前包及子包下面被納入sping容器管理的類。
注意事項(xiàng):
一般我們?cè)趯?shí)際項(xiàng)目中會(huì)根據(jù)自己的需要排除一些無(wú)需自動(dòng)配置的類,例如我們會(huì)配置自己的數(shù)據(jù)庫(kù),所以就不需要springboot自動(dòng)注入數(shù)據(jù)源,這可以利用exclude進(jìn)行排除
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
當(dāng)需掃描第三方j(luò)ar包時(shí),我們可以通過(guò)在配置類中使用@Configuration與@ComponentScan來(lái)引入第三方j(luò)ar包下的類
@Configuration@ComponentScan(basePackages = {"com.test.service"}) //引入第三方j(luò)ar包下的類
2、@Import
@Import注解可用來(lái)導(dǎo)入一個(gè)或者多個(gè) Spring 配置文件,特別是第三方j(luò)ar包下的一些配置類,需要通過(guò)Import注解進(jìn)行加載,代碼如下所示
@Import({KafkaConfig.class, JedisConfig.class}) //引入第三方j(luò)ar包里配置類
二、配置相關(guān)
以一般的的配置類中用到的注解為例
1、@Configuration
@Configuration專門(mén)用來(lái)標(biāo)注配置類,它一般會(huì)配合
2、@Bean
使用@Bean注解拿到配置返回相關(guān)實(shí)例,并放入sping容器中統(tǒng)一管理
3、@PropertySource
目的是加載指定路徑下的屬性文件
4、@Value
配合@PropertySource注解使用,指定該字段對(duì)應(yīng)的配置文件中的內(nèi)容
5、@Order
利用@Order控制配置類的加載順序
結(jié)合以上注解對(duì)kafka進(jìn)行配置示例代碼如下
- @Configuration
- @PropertySource("classpath:spring-kafka.properties")
- @Order(2)
- public class KafkaConfig {
- @Value("${spring.kafka.bootstrap-servers}")
- private String bootstrapServers;
- @Bean
- public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<Object, Object>> kafkaListenerContainerFactory() {
- ConcurrentKafkaListenerContainerFactory<Object, Object> factory = new ConcurrentKafkaListenerContainerFactory<Object, Object>();
- factory.setConsumerFactory(consumerFactory()); factory.setConcurrency(1);
- // factory .getContainerProperties().setPollTimeout(1000);
- return factory;
- }
- }
三、構(gòu)造相關(guān)
1、@Service
用于標(biāo)注服務(wù)層,主要用來(lái)進(jìn)行業(yè)務(wù)的邏輯處理
2、@Repository
用于標(biāo)注持久層,主要用來(lái)進(jìn)行數(shù)據(jù)庫(kù)相關(guān)操作
3、@Component
一個(gè)通用的注解,可以注解各種組件,就是說(shuō)當(dāng)我們需要注入sping容器中bean類沒(méi)有明確分類時(shí)(不屬于@service、@Repository等的時(shí)候),我們就可以使用@Component來(lái)標(biāo)注這個(gè)類。
4、@Scope
spring容器管理bean默認(rèn)是單例模式,如果你需要使用多例模式可以通過(guò)@Scope("prototype")注解來(lái)實(shí)現(xiàn)。
5、@Autowired
這個(gè)就很簡(jiǎn)單了,用于Spring容器中Bean類實(shí)例的注入
6、@PostConstruct
在Bean初始化之后(構(gòu)造方法和@Autowired之后)執(zhí)行指定操作。如果在項(xiàng)目中有些操作需要在Bean類構(gòu)造后執(zhí)行,可以使用@PostConstruct注解,實(shí)例代碼如下
- @RestController
- @RequestMapping("/api")
- public class ApiController extends BaseController { @PostMapping("/login")
- public User login(@RequestBody User user){
- //代碼
- }
- @GetMapping("/getUser")
- public User getUser(@RequestParam String userName, @RequestParam String userPhone){
- //代碼
- }
- }