自动装配 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原理,及如何实现自定义装配

Spring Boot 自动装配定义与自定义starter原理,及如何实现自定义装配

ServletContext 和 Spring MVC

SpringBoot基础自动装配原理

Condition自动装配

基于java容器注解---基于泛型的自动装配