【问题标题】:Inject logic into spring component scanning process在spring组件扫描过程中注入逻辑
【发布时间】:2013-12-23 03:27:34
【问题描述】:

因此可以使用<context:component-scan ...>@ComponentScan("org.rythmengine.spring.web") 来允许spring 扫描特定包下的bean。问题是如何在扫描过程中注入我的逻辑?假设我想利用 spring 的扫描来查找所有实现某个接口的类,或者使用某个注解进行注解。

【问题讨论】:

  • 添加include-filter 以指定该注释或接口。见docs.spring.io/spring/docs/current/spring-framework-reference/…
  • 谢谢。我在哪里可以得到被过滤掉的类集合?
  • 你不能... Spring 将使用它们作为组件。你能在你想要的东西上表现得更有表现力吗?因为最初看起来您想要添加自己的自定义注释以被拾取,但显然您想要其他东西。
  • 这里是故事。我正在为 Spring 创建一个视图引擎插件,特别是 rythmengine.org。用户可以定义实现特定接口的标记类。我不希望用户在他们的 xml 配置文件中添加一堆设置来告诉我的插件哪些类被定义为标签,而是插件扫描用户的包以获取他们的标签类并自动注册到模板渲染引擎
  • 那么不要为此使用组件扫描。您可能想查看LocalSessionFactoryBean(或其JPA 对应部分)的源代码,了解如何为@Entity 类完成类路径扫描和注册,基本上这就是您想要的。

标签: java spring spring-mvc reflection component-scan


【解决方案1】:

对于扫描/检测组件,我建议看看<context:component-scan />LocalSessionFactoryBean 如何扫描组件或实体。两者都使用相同的底层机制来检测类。

至于@CacheFor 注释,我建议利用Spring AOP,就像spring 用于@Transactional@Cacheable 一样(仅举出2 个设备)。

当然,您可以将所有内容都很好地放在命名空间后面,就像<tx:annotation-driven /><cache:annotation-driven />。这一切都在参考指南的this section 中进行了解释。

链接

  1. 扫描实体source | source
  2. 开发自定义命名空间reference
  3. 带弹簧的 AOP reference

【讨论】:

  • 你能给出处理@Transactional@Cacheable注解的spring源码的链接吗?
猜你喜欢
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多