我需要创建一种添加自定义注释的方法
@Value("${my.property}")
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,我需要从数据库而不是属性文件中获取值.
基本上我想在容器启动时创建一个bean,它从数据库中读取属性名称值对,然后可以将这些值注入属于其他bean的字段中.
方法#1:
一种方法是创建一个Aspect,其切点表达式与具有此批注的任何方法匹配.
那么您的方面将是:
AOP Kickstart
这是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的工作方式.
..实际上我认为方法#2听起来更像你想要的 - 所有的处理都发生在"启动"上...(实际上你甚至在启动之前就修改了bean配方)..如果你使用AOP,你会拦截方法调用,这对你来说可能为时已晚?
命名空间处理程序
如果您需要,您甚至可以创建自己的Spring 命名空间处理程序,以便以简洁的方式打开后处理器.例如:
<myApp:injectFromDb />
Run Code Online (Sandbox Code Playgroud)
作为替代:
<bean class="MyDatabaseLookupProcessorImpl etc, etc. />
Run Code Online (Sandbox Code Playgroud)
更新:方法#3
从Spring 3.1开始,还有PropertySourcesPlaceholderConfigurer,它将为您提供大部分管道,因此您可以使用更少的代码实现此目的.
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |