当前位置: 首页 > 面试题库 >

在Spring中,如何在包(包括子包)中的每个bean id前面加上常量字符串?

吴俊风
2023-03-14
问题内容

有没有办法@Component在给定的字符串和子包中给每个带注释的bean 加上给定的字符串?

说,我们有这个bean,例如:

package com.example.foo;

@Component
class MyBean {}

我希望所有的bean foo都带有前缀foo,以便自动(通过组件扫描)生成的bean id是fooMyBean(首选,大写的’M’)或foo- myBean(而不是默认的myBean)。(前缀是在某处定义的字符串,不是从包名称自动派生的。)

另外,我可以通过使用自定义注释(例如)来实现此目的@FooComponent吗?(怎么样? ;-) )


问题答案:

Spring使用BeanNameGenerator策略来生成Bean名称。特别是,AnnotationBeanNameGenerator是@Component使用
首字母小写 策略为类生成类的名称的类。

您可以BeanNameGenerator通过检查传递的来实现自己的策略并应用自定义策略BeanDefinition

如果您使用的是Spring
Boot,则可以在SpringApplicationBuilder中完成。

@SpringBootApplication
public class DemoApplication {

    public static class CustomGenerator extends AnnotationBeanNameGenerator {

        @Override
        public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
            /**
              * access bean annotations or package ...
              */
            return super.generateBeanName(definition, registry);
        }
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(DemoApplication.class)
                .beanNameGenerator(new CustomGenerator())
                .run(args);
    }
}


 类似资料:
  • 当我使用之类的东西时,它仍然会触发,就像连字符无效一样。我尝试了和

  • 问题内容: 我正在研究一个项目,一个要求是,如果main方法的第二个参数以“ ” 开头(对于Linux),则应将其视为绝对路径(不是问题),但如果它不是以“”开头”,则它应获取该类的 当前工作路径 ,并将其附加给定的参数。 我可以通过几种方式获取类名:,和,等等。 问题是,这只会给我提供存储包的目录-即,如果我有一个存储在“ ”中的类,它将只给我“ ”,而忽略了实际存在的包名称。 有什么建议? 编

  • 问题内容: Java中的String数据类型使我们可以通过codePointCount知道一个字符串中有多少个Unicode字符。以及如何通过codePointAt获取第n个unicode char。我很想知道是否有一个API来获取包含Java中前N个unicode字符的子字符串。 谢谢, 问题答案: 没有一个方法可以一次调用,但可以帮助您完成此操作。

  • 问题内容: 当我使用某种方式时,它仍然会触发,好像连字符无效。我试着和 问题答案: 转义使用应该没问题,但是您也可以尝试将其放在字符类的开头或结尾。这应该为您工作:

  • 问题内容: Golang的新手,并提出了一个看似简单的问题。如果我在项目根目录的main包中有一个logger(并在中定义),那么该如何在子包(即my )中引用该logger ? 我的目录结构是: main.go logger.go routes \ routes.go … 我认为如果Logger是公共的,它已经可以用于路由了,但是我在中得到了“ undefined:Logger” 。而且,如果我

  • 使用我发现研究如何在字符串的字符之间插入空格的代码(这里),我修改了结果,但这并没有在“你好”和“世界”之间的空格周围插入额外的空格——你能让我知道我错过了什么吗?还有,L%2是做什么的?谢谢!将结果输出到浏览器是很重要的。