gpt4 book ai didi

spring - @Value 等自定义注解

转载 作者:行者123 更新时间:2023-12-04 18:08:58 25 4
gpt4 key购买 nike

我需要创建一种添加自定义注释的方法,例如

@Value("${my.property}")

但是,就我而言,我需要从数据库而不是属性文件中获取值。

基本上我想在容器启动时创建一个 bean,它从数据库中读取属性名称值对,然后可以将它们注入(inject)到属于其他 bean 的字段中。

最佳答案

方法#1:

一种方法是创建一个 Aspect,其切入点表达式与具有此注释的任何方法相匹配。

然后你的方面将:

  • 读取注解中的属性值
  • 查找所需的值并将其注入(inject)到类中。

  • AOP 启动

    这是 Spring AOP 入门指南

    http://www.tutorialspoint.com/spring/aop_with_spring.htm

    连接点匹配

    这是描述如何创建与注释匹配的连接点的引用: http://eclipse.org/aspectj/doc/next/adk15notebook/annotations-pointcuts-and-advice.html

    方法#2:

    另一种方法是使用 BeanFactoryPostProcessor - 这本质上是 PropertyPlaceholderConfigurer 的工作方式。
  • 它将查看您的 bean 定义,并获取底层类。
  • 然后它将使用反射检查类中的注释。
  • 它将更新 bean 定义以包括根据注释中的值注入(inject)属性。

  • . .实际上,我认为方法#2 听起来更像您想要的——所有处理都发生在“启动”时。 . . (实际上,您甚至在启动之前就修改了 bean 配方)。 .而如果你使用 AOP,你会拦截方法调用,这对你来说可能为时已晚?

    命名空间处理程序

    如果您愿意,您甚至可以创建自己的 Spring 命名空间处理程序 以简洁的方式打开您的后处理器。例如:
    <myApp:injectFromDb />

    作为替代方案:
    <bean class="MyDatabaseLookupProcessorImpl etc, etc. />

    更新:方法#3

    从 Spring 3.1 开始,还有 PropertySourcesPlaceholderConfigurer ,这将为您提供大部分管道,因此您可以用更少的代码实现这一点。

    关于spring - @Value 等自定义注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19316575/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com