【问题标题】:Dynamically Spring AOP in Eclipse?Eclipse中的动态Spring AOP?
【发布时间】:2012-09-01 04:51:20
【问题描述】:

我正在使用 Eclipse Juno IDE。

我有一个 java 应用程序。

在程序中我有这些类:Team.java Player.java 现在我允许用户向球队添加新球员,用户给我球员数据。 每个玩家都有一个日志文件。

现在,当玩家被添加到团队时,会发生“玩家被添加到团队”事件 我想要做的是记录这个事件并将发生的事情写在播放器的日志文件中。

我想用 Spring AOP 处理那些日志记录问题。那怎么办呢?

我看到的所有示例都与 applicationContext.xml 文件一起使用。我需要写什么 在这个文件中,如果播放器是动态创建的?

【问题讨论】:

  • 请澄清您的问题。我不明白你想要什么。而且我无法对您的 XML 文件做出明智的评论,因为没有看到它。 ;-)
  • 嗨,Kriegaex!我编辑了我的问题:)

标签: java spring aop aspectj spring-aop


【解决方案1】:

虽然有些教程让您相信 Spring 用于定义值对象之间的依赖关系,例如 House bean 依赖于 DoorHeating bean 等 - 典型的 Spring 应用程序不是这样构建的。 Beans 通常用于声明无状态的单例服务,一劳永逸。引导后没有太多动态的东西。

但是您可以在您的示例中使用 Spring。只需将 player 定义为原型,惰性初始化 bean:

<bean class="Player" scope="prototype" lazy-init="true"/>

每次您需要新的Player 时,请向容器索取:

applicationContext.getBean(Player.class);

返回的 bean 将是完整的 Spring bean,除了 Spring 不会调用 @PreDestroy 回调。但是 AOP 会起作用。

【讨论】:

  • @eliorsh:如果播放器是动态创建的(在某些代码中使用new 运算符,您无法控制),那么您所能做的就是加载或编译时编织 (LTW/CTW) + Spring。
  • Tomasz,但是如果我创建自己的注释(接口)并用@retention(runtime) 注释这个接口......它会工作吗?
  • 托马斯非常感谢你!您对使用原型的建议是一个很好的解决方案!但我不明白 LTW/CTW 是什么意思?它是什么?你有什么例子吗?
  • @eliorsh:我没关注,什么注释?它将如何帮助您?如果您无法控制的代码创建了您的 Player 对象,您必须使用 LTW/CTW 来拦截该过程。
  • @eliorsh:LTW/CTW 是一种重量级技术,您可以通过修改字节码来应用 AOP。如果 prototype 作用域适合你,那就别管它了 ;-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多