如何从不是由弹簧创建的对象中访问弹簧豆

2022-09-04 19:21:00

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


答案 1

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

春季实施

您可以注册并获取对bean的引用并静态地提供服务ApplicationContextAwareApplicationContext

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);}

}

答案 2

阅读有关允许使用AspectJ配置Bean的注释:@Configurable

如果您不想使用AspectJ,则可以使用

ApplicationContext.getAutowireCapableBeanFactory().autowireBean()

配置生活在弹簧容器外部的豆子的方法。(参见 java 文档)。


推荐