自动装配 servletContext 与实现 servletContextAware
Posted
技术标签:
【中文标题】自动装配 servletContext 与实现 servletContextAware【英文标题】:autowiring servletContext vs implementing servletContextAware 【发布时间】:2015-11-22 07:03:11 【问题描述】:我已经看到了两种在服务/控制器中获取 servletContext
bean 的方法。
1) 简单的方法就是自动装配:
@Autowired
ServletContext servletContext;
2)另一种方式是实现servletContextAware
接口:
@RestController("/mycontroller")
public myController implements ServletContextAware
private ServletContext context;
@Override
public void setServletContext(ServletContext context)
this.context = context;
public String getContextPath()
return context.getContextPath();
这两者的优缺点是什么?推荐的方式是什么?
【问题讨论】:
这样的问题主要攻击自以为是的答案。 只要有建设性,就很好。这就是为什么 SO 而不是一些随机论坛? 我发现在从 XML 配置迁移到 Java 配置时,具有@Autowired
ServletContext 的类在启动时可能会失败。对此的一种补救措施是在这些情况下实施ServletContextAware
。
【参考方案1】:
没有人回答,所以我会试一试。
注解版本更简单,但如果没有启用自动装配(或在此功能之前的 Spring 版本中),则只有 ServletContextAware
版本可以工作。
如果您启用了该功能,推荐的方式是前者。
【讨论】:
完全基于意见。我实际上更喜欢不使用注释,因为那是 Spring 概念泄漏到您的课程中。以上是关于自动装配 servletContext 与实现 servletContextAware的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 自动装配定义与自定义starter原理,及如何实现自定义装配