13

在我的网络应用程序中,我使用休眠和弹簧。从 Hibernate 层返回的实体类在某些场景下需要访问其他服务类。实体类不仅仅是 DTO,它们包含一些业务逻辑,并且要执行一些业务逻辑(例如在满足某些条件时可能发送电子邮件等),这些需要访问服务类。服务类是spring bean。那么在这种情况下,从这些在 spring 上下文之外创建的实体类中获取 spring bean 的推荐方法是什么?

4

2 回答 2

16

您正在寻找服务定位器模式,

春季实施

您可以注册并获取对beanApplicationContextAware的引用和静态服务ApplicationContext

public class ApplicationContextUtils implements ApplicationContextAware {
 private static ApplicationContext ctx;

 private static final String USER_SERVICE = "userServiceBean";

  @Override
  public void setApplicationContext(ApplicationContext appContext)
      throws BeansException {
    ctx = appContext;

  }

  public static ApplicationContext getApplicationContext() {
    return ctx;
  }

  public static UserService getUserService(){return ctx.getBean(USER_SERVICE);}

}
于 2013-10-10T17:14:16.567 回答
5

阅读@Configurable允许使用 AspectJ 配置 bean 的注释:

如果你不想使用 AspectJ,你可以使用

ApplicationContext.getAutowireCapableBeanFactory().autowireBean()

方法来配置位于 spring 容器之外的 bean。(见java文档)。

于 2013-10-10T21:10:32.293 回答