Spring Boot注解

本文详细介绍了Spring Boot注解的使用,包括注解的作用、元注解和反射机制。重点讨论了Spring Boot如何通过注解激活功能,如`import`注解、`Enable`注解配合`ImportSelector`和`ImportBeanDefinitionRegistrar`。同时,解释了`spring.factories`机制和属性配置,如`@Value`、`@PropertySource`和`@ConfigurationProperties`。此外,还概述了Spring切面编程的基础,包括切面、连接点等概念,以及`@Aspect`、`@Pointcut`等注解的使用。
摘要由CSDN通过智能技术生成

注解

  1. 使用注解主要是可以带有一些元数据信息,注解本身没有任何的处理。他的处理逻辑是需要其他的一些代码作为配合。
  2. 有四个元注解是用来定义注解的。(@Document/@Inherited/@Target/@Retetion 元注解参考文章
  3. A注解上的其他注解B,若C上注入A,则B的功能也会激活。(应该是spring中大多数注解的机制,即为复合注解)。
  4. 组合注解,A/B两个基础注解,新增一个注解C,并在C中通过@aliasFor指定关联其他注解的属性,其他注解的对应属性也都会有值,spring 对注解的增强(spring注解@AliasFor的使用)
  5. 可以通过反射机制获取注解信息

Spring boot注解

  1. import
    import注解会把类或者配置类的对象交由spring io容器接管。

  2. spring 功能激活模式

    • 通过注解+切面自动激活:切面指定注解声明的对象(方法)为切入点,激活对应功能。
    • 通过启动注解激活功能(Enable*):注解定义时,导入某个类到spring容器,该类带有一些初始化或者切面功能。参考文章 enable*
      • Enable注解+import配置bean引入一堆bean
      • Enable注解+ import ImportSelector实现类,通过其类的selectImports获取注解信息,并做对应处理。特点:返回的是需要加入ioc容器中的类全限定名
      • Enable注解+import ImportBeanDefinitionRegistrar实现类,通过该类获取注解信息,通过beanDefinitionRegistry把类加入到spring容器。特点:加入spring容器的类可以根据注解做一些额外的处理,如根据注解的内容给Bean做赋值处理。参考文章-ImportBeanDefinitionRegistrar接口
    • spring.factories机制:
      类似于Java spi机制,模块间基于接口实现,接口的实现挪到模块外,对于springboot的实现就是spring.factories,就是在这个配置文件中指定接口的具体实现(有可能会有多个)。该文件中以org.springframework.boot.autoconfigure.EnableAutoConfiguration为key的所有value自动配置类,会被springboot加载,然后按配置类中具体的注解依赖实例化spring bean。
  3. spring 属性配置

    • @value引入属性:@Value(“${属性名}”)
    • @PropertySource读取自定义配置properties 文件
    • @ConfigurationProperties读取yml配置形成属性配置bean。在配置类Configuration中声明启用哪个配置用于产生bean,用注解@EnableConfigurationProperties
  4. @AliasFor注解目的是为某个注解的属性取别名
    spring aliasfor注解参考文章

    • 同一个注解的多个属性间用,可以把注解默认属性value重命名
      在这里插入图片描述
    • 复合注解中使用,这样新定义的复合注解在继承注解的功能时,还可以把注解的属性在服务注解里重命名,形成统一的注解
    • 在这里插入图片描述

spring 切面(aop)

spring AOP核心概念

spring aspectJ 切入点语法(12种)

spring aspect切面参考文章

  • 核心概念:切面、连接点、切入点、目标对象(target)、代理对象(proxy)、切面框架(aspectJ)
  • spring 集成aspectj切面的常用注解:@aspect、@Pointcut、@Before、@Around、@After、@AfterRunning、@AfterThrowing
    1.创建一个类,使用@Aspect标注
    2.@Aspect标注的类中,通过@Pointcut定义切入点
    3.@Aspect标注的类中,通过AspectJ提供的一些通知相关的注解定义通知
    4.使用AspectJProxyFactory结合@Ascpect标注的类,来生成代理对象
  • 切面表达式语法(10个标签12种用法):
    12种切面表达式用法
  1. execution:用于匹配方法执行的连接点
  2. within:用于匹配指定类型内的方法执行(target.getClass().equals(within表达式中指定的类型x))
  3. this(x):用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配(x.getClass().isAssignableFrom(proxy.getClass()))
  4. target(x):用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配(x.getClass().isAssignableFrom(target.getClass());)
  5. args:用于匹配当前执行的方法传入的参数为指定类型的执行方法(args会在调用的过程中对参数实际的类型进行匹配,比较耗时,慎用)
  6. @within:用于匹配所以持有指定注解类型内的方法(被调用的目标方法Method对象.getDeclaringClass().getAnnotation(within中指定的注解类型) != null)
  7. @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解(target.class.getAnnotation(指定的注解类型) != null)
  8. @args:用于匹配当前执行的方法传入的参数持有指定注解的执行
  9. @annotation:用于匹配当前执行方法持有指定注解的方法
  10. bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法
  11. reference pointcut:引用其他切面表达式
  12. 组合型的pointcut:使用&&、||、!运算符关联多个切面表达式

spring 切面用法

1. 直接使用aspectJ: 使用@Aspect声明切面(顾问/连接/advisor)类,@Pointcut定义切入点,@Before /@After/@Around 等定义通知,将切入点与切面逻辑绑定。(切入点固定,直接aspectJ切面框架
@Component
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值