Spring组合注解与元注解

  • 目录

    1. 注解说明
    2. 源代码
    3. 使用范例

注解说明

  1. 元注解:可以注解到别的注解上的注解,所以元注解首先基于条件@Target({ElementType.TYPE}) ,目标使用在类文件上 。
  2. 组合注解:连个元注解组合在一起的注解,注解A使用了注解B,那么注解A就叫组合注解,注解A会继承注解B的功能。

源代码

  springBoot的入口注解@SpringBootApplication是一个组合注解,由注解@EnableAutoConfiguration、@SpringBootConfiguration,@ComponentScan,三个注解组成,功能继承了三个注解的功能。SpringBootApplication源码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.boot.autoconfigure;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.AutoConfigurationExcludeFilter;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration // 元注解
@EnableAutoConfiguration // 元注解
@ComponentScan( // 元注解
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    Class<?>[] exclude() default {};

    @AliasFor(
        annotation = EnableAutoConfiguration.class
    )
    String[] excludeName() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackages"
    )
    String[] scanBasePackages() default {};

    @AliasFor(
        annotation = ComponentScan.class,
        attribute = "basePackageClasses"
    )
    Class<?>[] scanBasePackageClasses() default {};
}

使用范例

  组合注解可以将多个元注解的功能集中到一个注解上 ,方便使用,简化代码。 写一个配置文件MyConfiguration将@Configuration 、@ComponentScan 两个注解组合在一起

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration //1元注解
@ComponentScan //2元注解
public @interface MyConfiguration {
String[] value() default {}; //3
}

  配置类使用注解

@MyConfiguration("springboot.annotation")//1使用自定义注解扫描文件夹,加载文件
public class DemoConfig {
}

  写一个TestBean放在 springboot.annotation下

@Service
public class DemoService {
public void outputResult(){
    System.out.println("从组合注解配置照样获得的bean");
}
}

  Main方法测试

public class Main {public static void main(String[] args) {
  AnnotationConfigApplicationContext context =
    new AnnotationConfigApplicationContext(DemoConfig.class);
  DemoService demoService = context.getBean(DemoService.class);
  demoService.outputResult();//输出:从组合注解配置照样获得的bean
  context.close();
}

原文地址:https://www.cnblogs.com/jonrain0625/p/11219764.html

时间: 2024-10-01 02:21:31

Spring组合注解与元注解的相关文章

组合注解与元注解

从spring2开始,为了响应jdk1.5推出的注解功能,spring开始大量加入注解来代替xml配置.随着注解的大量使用,我们发现多个相同的注解被在不同的类或者方法里多次使用的时候,代码看起来比较繁琐.这就是所谓的样板代码,是spring设计原则中要消除的代码.比如以下代码: 如果我们把以上三个注解合并为一个注解,那多省事儿!这就是组合注解,与之相对的就是元注解. 元注解就是可以注解到别的注解上的注解,被注解的注解就是组合注解. 额,好乱.元注解就是可以用来跟别的注解搭配,从而构造出新的注解的

Spring----组合注解与元注解

1.概述 1.1.Spring提供了大量的注解, 尤其是相同的注解用到各个类中,会相当的啰嗦: 1.2.元注解: 可以注解到别的注解上的注解: 组合注解: 被注解注解的注解称为 组合注解: 组合注解  具备 元注解  的功能,Spring的很多注解都可以作为元注解: 1.3.案例 package com.an.config; import com.an.annotation.MyAnnotation; /** * @description: * @author: anpeiyong * @dat

JavaEE开发之Spring中的条件注解、组合注解与元注解

上篇博客我们详细的聊了<JavaEE开发之Spring中的多线程编程以及任务定时器详解>,本篇博客我们就来聊聊条件注解@Conditional以及组合条件.条件注解说简单点就是根据特定的条件来选择Bean对象的创建.条件注解就是可以根据不同的条件来做出不同的事情.在Spring中条件注解可以说是设计模式中状态模式的一种体现方式,同时也是面向对象编程中多态的应用部分.而组合注解就是将现有的注解进行组合.下方会给出具体的介绍和实例. 一.条件注解[email protected] 本篇博客的本部分

Annotation注解及元注解

在使用许多第三方框架的时候,查阅源码如ButterKnife等.发现许多注解的使用,顿时觉得注解都玩不溜怎么称霸武林.当然无论Java还是Android的SDK中都有大量注解的使用,以前总是走马观花,印象中知道注解代表的意思,但开口总是说不清道不明,唯有总结方得始终. 注解是附加在代码中的一些信息,可以帮助一些代码分析工具如Lint分析代码,辅助开发者改善代码,对于开发者来说有个提示.警告的作用.但注解不会改变代码逻辑.在此总结了几个Android开发常见的注解的解释,以及对元注解的基本认识.

Spring Boot 运行原理 - 核心注解

https://www.jianshu.com/p/23f504713b94 核心注解 打开上面任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-autoconfigure-1.5.3.RELEASE.jar的org.springframework.boot.autoconfigure.condition包下条件注解如下: @ConditionalOnBean:当前容器有指定Bean的条件下. @ConditionalOnClass:当前类路径下有

Java中的元注解

注解为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据. 通过使用注解,我们可以将这些元数据保存在Java源代码中,并利用annotation API为自己的注解构造处理工具.注解必须佩戴自己相应的处理器,不然注解没有任何意思! 基本形式 在Java中定义一个注解的基本方式为: 1 import java.lang.annotation.RetentionPolicy; 2 import java.lang.annotation.Target; 3 4

Java 注解入门实例 &amp;&amp; 注解传参

参考 概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已经过时的方法; @Suppvisewarnings 用于通知java编译器禁止特定的编译警告. 注解按照运行机制划分 源码注解:注解只在源码中存在,编译成.class文件就不存在了: 编译时注解:注解在源码和.class文件中都存在(例:JDK自带注解): 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑

Spring注解与Java元注解小结

注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高度. 元注解 meta-annotation Java 5 定义了四个标准的元注解类型,用以提供对其它注解的功能说明. 位于java.lang.annotation包下,分别为: 1. @Target 2. @Retention 3. @Documented 4. @Inherited 以@Prof

spring学习(二)——注解

近期看github上Java项目接触到多种注解,这里对其使用场景做简单的整理 问题: 1. 为什么要用注解?不用注解是否可以实现? 2. 注解的组成? 注解类似一个接口 注解可以定义可指定的属性 3. 如何自定义注解? 4. java spring框架中有哪些已有的注解? 注解 使用场景 备注 @Configuration 类似于xml中<beans>标签   @Bean 类似于xml中<bean>标签 常与@Configuration配合使用  @ComponentScan 可指