spring注解

1、元注解

可以在其他注解上声明的注解;如果一个注解可以在其他注解上声明,它就是元注解

@Documented

  • 如果添加了元注解@Documented,该注解可以在javadoc中体现

@Retention

  • 用于描述注解的声明周期,表示在什么级别上保留注释信息;即被描述的注解在什么范围内有效
类型说明
RetentionPolicy.SOURCE在源文件中有效,即源文件保留
RetentionPolicy.CLASS在 class 文件中有效,即class文件保留
RetentionPolicy.RUNTIME在运行时有效,即运行时保留

@Inherited

  • 是否运行子类继承该注解,如果一个被@Inherited注解修饰的annotation类型作用于某个class,该类的子类也使用该annotation注解
  • 使用@Inherited annotation类型是被标注过的class的子类所继承,类并不从它所实现的接口继承annotation,方法并不从其所重载的方法继承annotation

@Target

  • 用于描述注释的使用范围
类型说明
CONSTRUCTOR用于描述构造器
FIELD用于描述域或属性
LOCAL_VARIABLE用于描述局部变量
METHOD用于描述方法
PACKAGE用于描述包
PARAMETER用于描述参数
TYPE用于描述类、接口(包括注解类型) 或enum声明

这四个元注解都是可选的

注解参数
  • 参数成员只能用public或默认两种访问权限
  • 可以为参数设置默认值
  • 如果注解只有一个参数,使用时可以直接去掉参数名赋值
  • 参数成员只能用8种基本数据类型和String 、Enum、Class、annotation等数据类型,以及这些类型的数组形式
  • 如果注解有多个参数,必须指定名称赋值,并以‘,’进行分割
2、模式注解
  • 只要在相应类上声明这些注解,就可以定义为spring bean;spring核心部分提供了几种内建模式注解;
  • 任何被@Component标注的组件均为组件扫描的候选对象;任何使用@Component标注的注解,当其标注组件时,同样可以被当做被扫描的候选对象
  • @Component is a generic stereotype for any Spring-managed component. Any component annotated with @Component is a candidate for component scanning. Similarly, any component annotated with an annotation that is itself meta-annotated with @Component is also a candidate for component scanning. For example, @Service is meta-annotated with @Component.
  • Spring 模式注解可理解为@Component“派生”注解
3、组合注解
  • 某个注解"元标注"一个或多个其他注解,目的在于将这些关联的注解行为组合成单个自定义注解
  • 举例@TransactionalService注解标注了@Transactional和@Service注解,前者是Spring事务注解,后者是Spring模式注解;@TransactionalService组合了这两个注解的语义,同时TransactionalService也是一个自定义的模式注解;
  • 言外之意是,Spring组合注解的元注解允许是Spring模式注解与其他Spring功能性注解的任意组合
4、spring注解属性别名和覆盖
  • 在Java反射编程模型中,注解之间无法继承,也不能实现接口,不过Java语言默认将所有注解实现Annotation接口,被标注的对象用API AnnotatedElement表达,通过AnnotatedElement#getAnnotation(Class)方法返回指定类型的注解对象,获取注解属性则需要显示地调用对应的属性方法

属性别名
在spring中使用@AliasFor 注解可以做到别名的功能,spring中别名可分为以下几类:

  • 显式别名(xplicit Aliases)
    同一个注解内的两个成员通过注解@AliasFor声明后互为别名,这就是显式别名
    在这里插入图片描述
  • 隐式别名(Implicit Aliases)
    同一个注解中的两个或多个成员通过注解@AliasFor去覆盖同一个注解的成员,它们彼此互为隐式别名
    在这里插入图片描述
  • 传递隐式别名(Transitive Implicit Aliases)
    同一个注解中的两个或多个成员通过注解@AliasFor去覆盖注解中的不同成员,但实际上因覆盖的传递性导致最终覆盖的是元注解中的同一个成员,这就是传递隐式别名
    在这里插入图片描述

均需要满足的条件:

  • 属性类型相同
  • 属性方法必须存在默认值
  • 属性默认值必须相同

属性覆盖
属性覆盖是指同一个注解的成员覆盖另一个成员,最终两个成员属性一致

  • 隐式覆盖
    当一个注解@One被元注解@Two标注,两个注解存在相同的属性方法method. @Two@method将会被@One#method属性覆盖
    在这里插入图片描述
  • 显式覆盖
    使用@AliasFor注解便可实现显式覆盖
  • 传递式显式覆盖
    如果注解@One@name显式覆盖了@Two@nameAlias,而@TwonameAlias显式覆盖了@Three#nameAlias,因为传递性,@One#name实际上覆盖了@Three#nameAlias
    在这里插入图片描述
5、spring 常见核心注解及使用场景
  • 元注解
Spring注解说明
@Documented注解将能够在JavaDoc中展现
@Retention描述注解的生命周期
@Inherited是否允许子类继承该注解
@Target表示该注解用于什么地方。默认值为任何元素
  • spring 模式注解
Spring注解说明
@Component通用组件模式注解
@Repository数据仓库模式注解 ,表示数据库增删查改操作
@Service服务模式注解,处理内部服务各种逻辑
@ControllerWeb控制器模式注解,处理各种Http交互
@Configuration配置类模式注解
  • 装配注解
Spring注解说明
@ImportResource替换XML元素
@Import限定@Autowired依赖注入范围
@ComponentScan扫描指定package下标注Spring模式注解的类
  • 依赖注入注解

    Spring注解说明
    @AutowiredBean依赖注入,支持多种依赖查找方式
    @Qualifier细粒度的@Autowired依赖查找
    Java注解说明
    @ResourceBean依赖注入,仅支持名称依赖查找方式
  • Bean定义注解

    Spring注解说明
    @Bean替换XML元素"<Bean>"
    @DependsOn替换XML元素<bean depends-on="."/>
    @Lazy替换XML元素<bean lazy-init=“true | falses”/>
    @Primary替换XML元素<bean primary=“true | falses”/>
    @Role替换XML元素<bean role="."/>
    @Lookup替换XML元素<bean lookup-method="."/>
  • spring条件装配注解

    Spring注解说明
    @Profile配置换条件注解
    @Conditional编程条件注解
  • 配置属性注解

    Spring注解说明
    @PropertySource配置属性抽象PropertySource注解
    @PropertySourcesPropertySource集合注解
  • 生命周期回调注解

    Spring注解说明
    @PostConstruct替换XML元素<bean init-method="."/>或InitializingBean
    @PreDestroy替换XML元素<bean destroy-method="."/>或DisposableBean
  • 注解属性注解

    Spring注解说明
    @AliasFor别名注解属性,实现复用的目的
  • 性能注解

    Spring注解说明
    @Indexed提升Spring模式注解的扫描效率
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值