springboot配置文件与注解

配置注解

   Spring Boot中的配置注解非常多样,它们主要用于简化Spring应用的配置和开发过程。以下是一些主要的配置注解及其简要说明:

@SpringBootApplication:

   这是Spring Boot的核心注解,是一个组合注解,它包括了@Configuration、@EnableAutoConfiguration、@ComponentScan。这个注解用来开启Spring Boot的自动配置功能,让Spring Boot根据添加的jar依赖自动配置应用。

@Configuration

   @Configuration 是 Spring 框架中的一个核心注解,它用于定义配置类,这些配置类相当于传统的 XML 配置文件,但提供了更加类型安全和面向对象的配置方式。通过 @Configuration 注解的类可以包含 @Bean 注解的方法,这些方法将会被 Spring 容器在启动时自动扫描并调用,用于生成容器中的管理对象(Bean)。
使用场景

  1. 替代 XML 配置文件:在 Spring 应用中,传统上通过 XML 文件来配置 Bean。但随着 Java 配置的引入,开发者可以通过使用 @Configuration 和 @Bean 注解来替代 XML 配置文件,使配置更加灵活和强大。
  2. 组合配置:通过 @Configuration 注解的类可以轻松地组合和重用配置。你可以通过 @Import 注解来导入其他配置类,从而实现配置的模块化。
  3. 条件化配置:结合 @Conditional 系列注解(如 @ConditionalOnBean、@ConditionalOnProperty 等),@Configuration 注解的类可以基于特定的条件来决定是否创建某个 Bean。
    示例
    下面是一个简单的使用 @Configuration 和 @Bean 注解的示例:
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
public class AppConfig {
     
  
    @Bean  
    public MyService myService() {
     
        return new MyServiceImpl();  
    }  
  
    // 其他 @Bean 方法...  
}  
  
class MyService {
     
    // 类的实现...  
}  
  
class MyServiceImpl implements MyService {
     
    // 具体的实现...  
}

   在这个例子中,AppConfig 类被 @Configuration 注解标记为配置类。它包含一个 @Bean 注解的方法 myService(),该方法将返回一个 MyService 接口的实现 MyServiceImpl 的实例。当 Spring 容器启动时,它会自动扫描到 @Configuration 注解的类,并调用其中的 @Bean 方法来生成并管理 Bean。

注意事项

  1. 非侵入式:使用 @Configuration 和 @Bean 注解进行配置时,不需要修改类的其他部分(如字段、构造函数或普通方法),这保持了类的原有结构和功能。
  2. 懒加载:默认情况下,Spring 容器中的 Bean 是单例的(Singleton),并且会在容器启动时就被创建。但是,如果你使用了如 @Lazy 注解等特定配置,可以实现 Bean 的懒加载。
  3. 性能考虑:虽然 Java 配置方式比 XML 配置更加灵活和强大,但在大型项目中,过多的 Java 配置类可能会增加应用的启动时间和内存消耗。因此,在使用时需要权衡利弊。

@EnableAutoConfiguration:

   @EnableAutoConfiguration 注解是 Spring Boot 中的一个核心注解,它告诉 Spring Boot 基于添加的 jar 依赖自动配置你的 Spring 应用。@EnableAutoConfiguration 会尝试根据你添加的 jar 依赖自动配置 Spring 应用。例如,如果 classpath 下存在 HSQLDB,并且你没有手动配置任何数据库连接 beans,Spring Boot 会自动配置内存数据库。

   然而,需要注意的是,从 Spring Boot 2.0 开始,@SpringBootApplication 注解包含了 @EnableAutoConfiguration,因此,在大多数 Spring Boot 应用中,你不需要显式地添加 @EnableAutoConfiguration。@SpringBootApplication 是一个方便的注解,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan。

示例
   虽然通常不需要显式地使用 @EnableAutoConfiguration,但了解它的工作原理和如何被 @SpringBootApplication 包含是有帮助的。下面是一个简化的例子,展示了如果我们要显式使用 @EnableAutoConfiguration(尽管这不是典型的做法):

import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
import org.springframework.context.annotation.Configuration;  
  
@Configuration  
@EnableAutoConfiguration // 通常在 Spring Boot 应用中不需要显式添加  
public class MyApplication {
     
  
    public static void main(String[] args) {
     
        SpringApplication.run(MyApplication.class, args);  
    }  
  
    // 这里可以添加其他的 @Bean 定义  
}

   在这个例子中,我们定义了一个名为 MyApplication 的配置类,并使用了 @Configuration 和 @EnableAutoConfiguration 注解。然而,正如前面提到的,我们通常会将这两个注解替换为 @SpringBootApplication,因为它已经包含了 @EnableAutoConfiguration 的功能,并且添加了 @ComponentScan 以确保 Spring Boot 能够扫描到其他的组件、配置和服务。

@ComponentScan:

   @ComponentScan 注解是 Spring 框架中的一个核心注解,它用于告诉 Spring 容器在哪个包(及其子包)中查找带有 @Component、@Service、@Repository、@Controller 等注解的类,并将这些类实例化为 Spring 容器中的 Bean。这样,Spring 就可以管理这些 Bean,包括它们的生命周期和依赖关系。

@ComponentScan 注解的基本用法

  1. value 或 basePackages 属性:指定要扫描的包路径。可以是单个包路径字符串,也可以是多个包路径组成的数组。
  2. basePackageClasses 属性:通过指定一个或多个类(位于要扫描的包或其子包中),来间接指定要扫描的包。这种方式可以避免硬编码包名,增加代码的可维护性。
  3. excludeFilters 和 includeFilters 属性:用于定制扫描过程,通过定义包含或排除的规则来精细控制哪些类应该被扫描并注册为 Bean。

示例
   假设我们有一个 Spring Boot 应用程序,我们希望 Spring 容器扫描 com.example.demo 包及其子包中的组件。

   通过 @SpringBootApplication 间接使用 @ComponentScan
在 Spring Boot 应用程序中,你通常不需要显式地使用 @ComponentScan,因为 @SpringBootApplication 已经包含了 @ComponentScan。但是,你可以通过 scanBasePackages 属性来定制扫描的包路径。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值