首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用自定义注释找到所有bean?

配置:

代码语言:txt
AI代码解释
复制
@Lazy
@Configuration
public class MyAppConfig {
    @Foo @Bean
    public IFooService service1() { return new SpecialFooServiceImpl(); }
}

如何获得所有带注释的bean的列表?

注:@Foo是我定义的自定义注释。它不是“正式”Spring注释之一。

下面是我的代码

代码语言:txt
AI代码解释
复制
import static org.junit.Assert.*;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import java.lang.annotation.Retention;
import java.lang.reflect.Method;
import java.util.Map;
import org.junit.Test;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;

public class CustomAnnotationsTest {

    @Test
    public void testFindByAnnotation() throws Exception {

        AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext( CustomAnnotationsSpringCfg.class );

        Method m = CustomAnnotationsSpringCfg.class.getMethod( "a" );
        assertNotNull( m );
        assertNotNull( m.getAnnotation( Foo.class ) );

        BeanDefinition bdf = appContext.getBeanFactory().getBeanDefinition( "a" );
        // Is there a way to list all annotations of bdf?

        Map<String, Object> beans = appContext.getBeansWithAnnotation( Foo.class );
        assertEquals( "[a]", beans.keySet().toString() );
    }


    @Retention( RetentionPolicy.RUNTIME )
    @Target( ElementType.METHOD )
    public static @interface Foo {

    }

    public static class Named {
        private final String name;

        public Named( String name ) {
            this.name = name;
        }

        @Override
        public String toString() {
            return name;
        }
    }

    @Lazy
    @Configuration
    public static class CustomAnnotationsSpringCfg {

        @Foo @Bean public Named a() { return new Named( "a" ); }
             @Bean public Named b() { return new Named( "b" ); }
    }
}

回答 2

你懂我方式不对

发布于 2018-01-30 01:47:57

可以用来获取bean方法的注释:

代码语言:txt
AI代码解释
复制
public List<String> getBeansWithAnnotation( Class<? extends Annotation> type, Predicate<Map<String, Object>> attributeFilter ) {

    List<String> result = Lists.newArrayList();

    ConfigurableListableBeanFactory factory = applicationContext.getBeanFactory();
    for( String name : factory.getBeanDefinitionNames() ) {
        BeanDefinition bd = factory.getBeanDefinition( name );

        if( bd.getSource() instanceof StandardMethodMetadata ) {
            StandardMethodMetadata metadata = (StandardMethodMetadata) bd.getSource();

            Map<String, Object> attributes = metadata.getAnnotationAttributes( type.getName() );
            if( null == attributes ) {
                continue;
            }

            if( attributeFilter.apply( attributes ) ) {
                result.add( name );
            }
        }
    }

    return result;
}

晓小峰哦

发布于 2018-01-30 01:18:11

使用getBeansWithAntation()方法来获得带注释的bean。

代码语言:txt
AI代码解释
复制
Map<String,Object> beans = applicationContext.getBeansWithAnnotation(Foo.class);
和开发者交流更多问题细节吧,去 写回答
相关文章
53.如何找到指定目录下所有图片
这个程序默认是查找图片的,当时你也可以通传入不同参数,查找其他类型文件。如果学完之后对你有收获,欢迎点个’在看‘。
TalkPython
2020/02/11
6450
53.如何找到指定目录下所有图片
pycharm删除所有注释_pycharm怎么取消注释
通过快捷键ctrl+shift+R 进入 项目全局替换窗口,点击右上角 勾选正则,然后 搜索框输入 (#.*) 即可 ,然后点击 replace all 去掉所有注释
全栈程序员站长
2022/09/27
3.9K0
pycharm删除所有注释_pycharm怎么取消注释
如何快速删除程序中的所有注释
前段时间,因为新冠肺炎的影响,美国的一家医疗器械公司——美敦力,公开了自家公司的一台呼吸机的设计源文件。包括原理图、BOM、源代码、CAD文件等。
MCU起航
2020/06/29
7.1K0
使用MapReduce运行自定义bean案例
在这个文件中,每一行的内容分别代表:手机号、IP、访问网站、上行流量、下行流量、状态码,现在需要统计每个手机号访问网站的上行流量、下行流量以及它们的总和。由于mapper按照每行进行切片,不妨创建一个bean,封装这些属性。
孙晨c
2020/07/16
5880
详解如何获取物种所有基因对应的GO注释
Gene Ontology是研究基因功能的重要数据库之一,在进行GO的富集分析时,需要提供所有基因对应的GO注释信息,本文介绍几种获取该信息的方式。
生信修炼手册
2020/05/08
10K0
详解如何获取物种所有基因对应的GO注释
如何批量去除代码内的所有注释?Remove.exe批量去除代码注释
写注释是一个非常好的习惯,但是某些情况下,我们又不想保留代码里的注释,于是就有了下面这个小软件(大小仅1.6m)。
房东的狗丶
2023/10/18
1.2K1
如何批量去除代码内的所有注释?Remove.exe批量去除代码注释
获取类中所有的bean
生命中有很多东西,能忘掉的叫过去,忘不掉的叫记忆。一个人的寂寞,有时候,很难隐藏得太久,时间太久了,人就会变得沉默,那时候,有些往日的情怀,就找不回来了。或许,当一段不知疲倦的旅途结束,只有站在终点的人,才会感觉到累。其实我一直都明白,能一直和一人做伴,实属不易。——海子 使用hutool实现 package com.ruben.simplescaffold; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.Clas
阿超
2022/08/17
1.1K0
获取类中所有的bean
IDEA 自定义注解(类注释、方法注释)
打开File —> Settings —> Editor —> File and Code Templates —> Files —> Class
ha_lydms
2023/08/09
3.5K0
IDEA 自定义注解(类注释、方法注释)
idea 自定义注释
日常开发当中,开发规范要求每个开发人员做到要必要的代码上加上注释。借助IDE可以快速的生成这些注释。
潇洒
2019/07/03
2.1K0
idea 自定义注释
日常开发当中,开发规范要求每个开发人员做到要必要的代码上加上注释。借助IDE可以快速的生成这些注释。
潇洒
2023/10/20
4460
idea 自定义注释
IDEA注释详解_idea自定义注释模板
网上很多都是在Includes的File Header里面添加,在这里面添加还需要自己去移动下鼠标,然后再去操作键盘,再去写description,,直接在创建类的时候就添加好description不更快吗?
全栈程序员站长
2022/11/11
1.4K0
IDEA注释详解_idea自定义注释模板
IDEA自定义设置类注释、方法注释
IDEA自定义设置类注释、方法注释 类注释 设置 -> 编辑器 -> 文件和代码模板 /** * 类名称 * Created by GMQ on ${DATE} ${TIME} * @module XX系统 */ public class ${NAME} { } 方法注释 设置 -> 编辑器 -> 代码模板 1.右上角+新建,选择第2项,如图 2.填入名称 3.选中新添加的模板,点击右上角+,选择第1项,如图填写名称、描述、注释模板 方法注释模板 * *
4xx.me
2022/06/09
5690
IDEA自定义设置类注释、方法注释
【Oracle】Oracle如何查看所有表和字段以及表注释和字段注释?其实很简单!!
作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验。为使更多童鞋受益,现给出开源框架地址:
冰河
2020/10/29
8.7K0
使用@Autowired注入父类对象时会报错,找到多个bean对象处理
当一个父类拥有子类时,通过@Autowired注入父类对象时会报错,无法区分注入的对象是父对象还是子对象。
bug专8
2021/01/07
4.2K0
PHP命令所有的参数及其注释
-a 以交互式shell模式运行 -c | 指定php.ini文件所在的目录 -n 指定不使用php.ini文件 -d foo[=bar] 定义一个INI实体,key为foo,value为'bar' -e 为调试和分析生成扩展信息 -f 解释和执行文件. -h 打印帮助 -i 显示PHP的基本信息 -l
友儿
2022/07/27
6580
使用VA助手如何快速添加注释(按doxygen注释规范)
首先,关于VA助手的破解安装教程,请参考:VS2015 Visual Assist X 破解版安装教程
3D视觉工坊
2020/12/11
4K0
使用VA助手如何快速添加注释(按doxygen注释规范)
SpringBoot如何使用注解装配Bean
在日常开发中,项目中大量的Bean的装配。今天就来聊聊如何使用注解装配Bean。这里与其说是SpringBoot装配Bean还是不如说是Spring注解来装配Bean。
田维常
2020/09/01
8790
点击加载更多

相似问题

如何找到具有.NET反射的类的所有直接子类?

2409

如何在数组中找到所有超过n / k次的值?

2226

如何在SpringBoot中以编程方式创建bean?

21.4K

如何使用jQuery在mouseover上找到当前元素?

2207

如何在MySQL中添加注释?

2557
相关问答用户
某公司 | 程序员擅长1个领域
腾讯云TDP | 先锋会员擅长2个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档