【问题标题】:Can't access instances from the spring project jar imported in other spring project无法从其他spring项目中导入的spring项目jar中访问实例
【发布时间】:2013-07-25 03:46:26
【问题描述】:

我创建了一个运行良好的春季项目罐子。我已将此 jar 导入另一个 spring 项目。现在,我想访问一些在 spring jar 中创建的实例。例如,下面的类来自内部弹簧项目。我想获取 AuthenticationClient 的实例。我对其进行编程的方式是创建一个静态 getter 方法,该方法将返回实例的引用。对于要在静态引用中设置的实例,我必须在侦听器中自动装配它。

因为,我已经将 jar 导入到另一个 Spring 项目中,我发现最终没有调用监听器,导致所有事件链都失败。下面是我试图访问 AuthenticationClient 实例的外部 Spring 项目的控制器

豆子

public class AuthenticationClient {

private @Autowired KerberosAPI kerberosAPI;
private @Autowired KerberosSessionManager kerberosSessionManager;
private static AuthenticationClient client;

public static AuthenticationClient getAuthenticationClient(){
    return client;
}

public @Resource(name="authenticationClient") void setAuthenticationClient(AuthenticationClient client){
    AuthenticationClient.client = client;
}

听众

public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent>` {

private @Autowired AuthenticationClient client;

@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
    ApplicationContext applicationContext = event.getApplicationContext();
    System.out.println();
    // now you can do applicationContext.getBean(...)
    // ...
}

}

控制器

@Controller

public class HomeController {

private  AuthenticationClient client;

/**
 * Simply selects the home view to render by returning its name.
 */
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
    client = AuthenticationClient.getAuthenticationClient();

    return "home";
}

}

【问题讨论】:

  • 为什么不直接使用@Autowired 或@Resource 注入AhthenticationClient?
  • AuthenticationClient 类有一些其他依赖项,这些依赖项又具有一些其他嵌套依赖项。
  • 您只需要 AuthenticationClient 吗?我的意思是没有它的依赖关系?
  • 我想初始化 AuthenticationClient 及其依赖项
  • 如果您想用罐子里的豆子进行注射,也许这 (stackoverflow.com/questions/17565363/…) 会有所帮助。

标签: java spring spring-mvc


【解决方案1】:

供其他正在寻找答案的用户参考。我们可以将 jar 的上下文文件导入到我们当前的项目中。确保 jar 在类路径中。然后,您可以像这样导入上下文

<beans:import resource="classpath:/src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml"/>

【讨论】:

  • 我担心 src/main/webapp 是一个源文件夹,你在启动 web 应用程序时测试它吗?
  • 是的,我也是这么想的。以前,我提供了来自 WEB-INF 的类路径,它无法加载上下文。但是一些给出完整路径的方法
  • 这个“servlet-context.xml”是在你的jar中还是在你项目的扩展目录下?
  • 我的项目扩展目录中有一个 servlet-context.xml,jar 中有另一个 servlet-context.xml
  • 然后把放到项目的servlet-context.xml中就可以了。
猜你喜欢
  • 2017-10-02
  • 2013-03-13
  • 1970-01-01
  • 2018-03-14
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多