Spring Boot——注解
Spring Boot 建立在 Spring 之上,包含了 Spring 的所有特性。并且由于其快速的生产就绪环境使开发人员能够直接专注于逻辑而不是为配置和设置而苦苦挣扎,如今它正成为开发人员的最爱。 Spring Boot 是一个基于微服务的框架,在其中制作可用于生产的应用程序只需要很少的时间。以下是 Spring Boot 的一些特性:
- 它允许避免在 spring 中存在的 XML 的繁重配置
- 它提供易于维护和创建 REST 端点
- 它包括嵌入式 Tomcat 服务器
- 部署非常简单,war和jar文件可以轻松部署在tomcat服务器中
Spring Annotations是一种元数据形式,提供有关程序的数据。注释用于提供有关程序的补充信息。它对他们注释的代码的操作没有直接影响。它不会改变编译程序的动作。因此,在本文中,我们将通过示例讨论 Spring Boot 中可用的注解。
Spring Boot 注解
org.springframework.boot.autoconfigure和org.springframework.boot.autoconfigure.condition包中的 Spring 注解通常称为 Spring Boot 注解。此类别中可用的一些注释是:
- @SpringBootApplication
- @SpringBoot 配置
- @EnableAutoConfiguration
- @ComponentScan
- 自动配置条件
- @ConditionalOnClass 和 @ConditionalOnMissingClass
- @ConditionalOnBean 和 @ConditionalOnMissingBean
- @ConditionalOnProperty
- @ConditionalOnResource
- @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
- @条件表达式
- @有条件的
1.@SpringBootApplication注解
此注解用于标记 Spring Boot 应用程序的主类。它封装了 @SpringBootConfiguration 、 @EnableAutoConfiguration和@ComponentScan注释及其默认属性。
例子:
Java
@SpringBootApplication
// Class
public class DemoApplication {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class, args);
}
}
Java
@SpringBootConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public StudentService studentService() {
return new StudentServiceImpl();
}
}
Java
@Configuration
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Java
@Configuration
@ComponentScan
// Main class
public class Application {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
Java
@Configuration
@ConditionalOnClass(MongoDBService.class)
class MongoDBConfiguration {
// Insert code here
}
Java
@Bean
@ConditionalOnMissingBean(type = "JpaTransactionManager")
JpaTransactionManager jpaTransactionManager(
EntityManagerFactory entityManagerFactory)
{
// Insert code here
}
Java
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "local")
DataSource
dataSource()
{
// Insert code here
}
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "prod")
DataSource
dataSource()
{
// Insert code here
}
Java
@ConditionalOnResource(resources
= "classpath:mongodb.properties")
Properties
additionalProperties()
{
// Insert code here
}
Java
@Bean
@ConditionalOnExpression("${env} && ${havingValue == 'local'}")
DataSource dataSource()
{
// Insert code here
}
Java
@Configuration
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
public class CloudConfigurationExample
{
// Insert code here
}
2.@SpringBootConfiguration注解
它是一个类级别的注解,是 Spring Boot 框架的一部分。这意味着一个类提供 Spring Boot 应用程序配置。它可以用作 Spring 标准@Configuration注释的替代品,以便可以自动找到配置。大多数 Spring Boot 应用程序通过 @SpringBootApplication 使用 @SpringBootConfiguration。如果一个应用程序使用@SpringBootApplication,它已经在使用@SpringBootConfiguration。
例子:
Java
@SpringBootConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public StudentService studentService() {
return new StudentServiceImpl();
}
}
3.@EnableAutoConfiguration注解
此注释自动配置类路径中存在的 bean。它通过从类路径假定所需的 bean 并对其进行配置以运行应用程序来简化开发人员的工作。这个注解是 Spring Boot 框架的一部分。例如,当我们说明类路径中的spring-boot-starter-web依赖项时,Spring boot 会自动配置 Tomcat 和 Spring MVC。声明@EnableAutoConfiguration 注解的类的包被认为是默认的。因此,我们需要在根包中应用@EnableAutoConfiguration 注解,以便检查每个子包和类。
例子:
Java
@Configuration
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.@ComponentScan注解
@ComponentScan 告诉 Spring 你在哪些包中注释了应该由 Spring 管理的类。因此,例如,如果您有一个使用 @Controller 注释的类,该类位于 Spring 未扫描的包中,您将无法将其用作 Spring 控制器。所以我们可以说@ComponentScan 使 Spring 能够扫描诸如配置、控制器、服务和其他定义的组件之类的东西。一般@ComponentScan注解与@Configuration注解配合使用,指定Spring扫描组件的包。
例子:
Java
@Configuration
@ComponentScan
// Main class
public class Application {
// Main driver method
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
5.@ConditionalOnClass注解和@ConditionalOnMissingClass注解
@ConditionalOnClass 注解用于标记自动配置 bean,如果注解参数中的类存在/不存在。
例子:
Java
@Configuration
@ConditionalOnClass(MongoDBService.class)
class MongoDBConfiguration {
// Insert code here
}
6.@ConditionalOnBean注解和@ConditionalOnMissingBean注解
这些注释用于根据特定 bean 的存在或不存在来包含 bean。
例子:
Java
@Bean
@ConditionalOnMissingBean(type = "JpaTransactionManager")
JpaTransactionManager jpaTransactionManager(
EntityManagerFactory entityManagerFactory)
{
// Insert code here
}
7.@ConditionalOnProperty注解
这些注释用于根据 Spring Environment 属性的存在和值包含配置。
例子:
Java
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "local")
DataSource
dataSource()
{
// Insert code here
}
@Bean
@ConditionalOnProperty(name = "usemongodb",
havingValue = "prod")
DataSource
dataSource()
{
// Insert code here
}
8.@ConditionalOnResource注解
这些注释用于仅在类路径中存在特定资源时才包含配置。
例子:
Java
@ConditionalOnResource(resources
= "classpath:mongodb.properties")
Properties
additionalProperties()
{
// Insert code here
}
9.@ConditionalOnExpression注解
这些注释用于根据SpEL(Spring 表达式语言)表达式的结果包含配置。
SpEL (Spring Expression Language): It is a powerful expression language that supports querying and manipulating an object graph at runtime.
例子:
Java
@Bean
@ConditionalOnExpression("${env} && ${havingValue == 'local'}")
DataSource dataSource()
{
// Insert code here
}
10.@ConditionalOnCloudPlatform注解
这些注释用于在指定的云平台处于活动状态时包含配置。
例子:
Java
@Configuration
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)
public class CloudConfigurationExample
{
// Insert code here
}