sping boot注解 解析

Spring 注解速查表

配置注解

  • @Configuration:标注一个类作为Spring的配置类。

    • 为spring boot做一些配置,创建一些service要用的配置bean,其本身也会作为一个特殊的bean被sping托管
    • 与@ComponentScan结合可以扫描指定的包,从而自动发现和注册组件。
    • 可以和@Import一起使用引入其他的配置类,从而实现配置的模块化和层次化。
  • @ComponentScan:指定Spring在初始化时扫描哪些包。

  • @Bean:用于在@Configuration类中定义一个Bean。

    • 一般被spring创建的bean都是单例的bean, 通过CGLIB动态代理来创建,这意味着Spring会生成这个类的子类,并且重写所有@Bean方法以确保单例模式(如果是单例作用域)。
    • 由于是通过CGLIB代理生成的子类,所以如果在@Configuration类中有一些方法依赖其他@Bean方法,这些依赖会自动被注入,无需显式调用。
    @Configuration
    public class AppConfig {
    
      @Bean
      public MyService myService() {
        return new MyServiceImpl();
      }
    
      @Bean
      public MyRepository myRepository() {
        return new MyRepositoryImpl();
      }
    
      @Bean
      public MyController myController() {
        return new MyController(myService(), myRepository());
      }
    }
      
    
    • 在这个例子中,myController方法中的myService()和myRepository()调用会返回Spring容器中的Bean实例,而不是每次都创建新的实例。

组件注解

  • @Component:通用的组件注解。
    • 用于将一个类标记为Spring管理的组件。Spring容器会通过组件扫描自动检测并注册被@Component注解标注的类为Bean。
    • @Component注解通常用于类级别。
  • @Service:标注服务层的组件。
  • @Repository:标注数据访问层的组件。
  • @Controller:标注控制器层的组件。

依赖注入注解

  • @Autowired:自动注入依赖。
    • 按类型注入:默认情况下,Spring根据类型(by type)自动装配Bean。
    • 可以用于构造函数、字段、Setter方法:可以标注在构造函数、字段或Setter方法上。
    • 可选的required属性:默认required属性为true,表示必须有匹配的Bean。可以将required属性设置为false,使其变为可选注入。
  • @Qualifier:配合@Autowired使用,用于指定具体的Bean。
    • @Qualifier 是Spring中的注解,用于在自动装配时指定需要注入的Bean。当有多个候选Bean时,使用@Qualifier注解来指定具体的Bean。
    • 用于消除歧义:当有多个同类型的Bean时,通过指定名称来消除歧义。
      结合@Autowired使用:通常与@Autowired一起使用。
    • @Qualifier(“specificService”)
  • @Resource:根据名称或类型注入依赖。
    • @Resource 是Java标准中的注解
    • @Resource注解可以根据名称或类型注入Bean。
    • 按名称注入:默认情况下,@Resource按名称(by name)注入Bean。
    • 可以用于字段和Setter方法:可以标注在字段或Setter方法上。
    • 支持名称和类型:如果没有指定名称,Spring会根据字段或方法参数的类型注入Bean。

生命周期注解

  • @PostConstruct:在依赖注入完成后调用。
    • @PostConstruct 注解用于在依赖注入完成后执行初始化操作。被@PostConstruct注解的方法会在Bean的构造函数执行完毕之后立即执行。
    • 在Bean初始化后执行:方法在依赖注入完成后立即被调用。
      只能用于无参方法:被@PostConstruct注解的方法不能有参数。
  • @PreDestroy:在销毁Bean之前调用。
    • @PreDestroy 注解用于在Bean销毁之前执行清理操作。被@PreDestroy注解的方法会在Spring容器销毁该Bean之前调用。
    • 在Bean销毁前执行:方法在Spring容器销毁Bean之前被调用。
      只能用于无参方法:被@PreDestroy注解的方法不能有参数。

AOP注解

  • @Aspect:标识一个类为切面类。
  • @Before:在目标方法执行之前执行。
  • @After:在目标方法执行之后执行。
  • @Around:在目标方法执行的前后执行。
  • @Pointcut:定义一个切点。
    • @Pointcut注解可以用于一个方法,该方法不包含任何实现代码,只是定义一个切入点表达式。之后,这个方法可以在其他通知(Advice)中引用,从而实现通知的重用。
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class LoggingAspect {
    
      // 定义一个切入点表达式
      @Pointcut("execution(* com.example.service.*.*(..))")
      public void serviceLayer() {
          // 方法体为空,因为这个方法只是一个切入点的标识
      }
    
      // 使用切入点表达式
      @Before("serviceLayer()")
      public void logBefore() {
          System.out.println("Before method execution");
      }
    
      @After("serviceLayer()")
      public void logAfter() {
          System.out.println("After method execution");
      }
    }
    
    
    

Spring Boot注解

  • @SpringBootApplication:组合注解,包括@Configuration@EnableAutoConfiguration@ComponentScan
    • 示例项目结构
      为了更好地理解默认扫描范围和修改扫描范围的区别,以下是一个示例项目结构:
    com.example
    ├── MySpringBootApplication.java
    ├── controller
    │   └── MyController.java
    ├── service
    │   └── MyService.java
    └── repository
        └── MyRepository.java
    
    • Spring Boot将扫描com.example包及其所有子包,包括controller、service和repository包中的组件。
    • @ComponentScan(basePackages = {“com.example.service”, “com.example.repository”})
    • 可以通过basePackages来指定扫描的包,其他的包就不会被扫描
    • 如何想要添加扫描的包,则需要显示声明默认的扫描包和额外的扫描包
  • @EnableAutoConfiguration:启用Spring Boot的自动配置机制。
    • @EnableAutoConfiguration:根据类路径中的类和配置属性,自动配置Spring应用上下文中的Bean。
      简化配置:减少手动配置工作量,使Spring应用更加开箱即用。
      自定义:可以通过exclude属性排除某些自动配置类,进行定制化配置。
    • 这种自动配置机制极大地简化了Spring应用的开发过程,使得开发人员可以专注于业务逻辑的实现,而不需要过多关注配置细节。
  • @RestController:组合注解,包括@Controller@ResponseBody

事务管理注解

  • @Transactional:声明事务管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值