【问题标题】:How could Spring find his classes in a project?Spring 是如何在一个项目中找到他的课程的?
【发布时间】:2016-05-04 15:13:13
【问题描述】:

这可能是一个微不足道且无意义的问题,但作为 Spring 新手,我总是问自己“Spring 如何在扩展他的类的项目中使用类?”

例如AbstractAnnotationConfigDispatcherServletInitializer:

public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer 
{

    @Override
    protected Class<?>[] getRootConfigClasses() {

    }

}

我的Initializer 类是在一个手工构建的包中声明的,具有非特殊名称,所以我想知道:Spring 如何找到并实例化我的Initializer 类?它是否会对我的项目进行任何形式的“包扫描”,试图获取所有扩展他自己的类,还是什么?

【问题讨论】:

  • WebApplicationInitializer 在应用程序启动时初始化,并根据 web.xml 中的“/”映射注册 servlet。所以所有的 *servletInitializers 都实现了 WebApplicationInitializer。供将来参考:docs.spring.io/autorepo/docs/spring-framework/3.1.x/javadoc-api/…
  • 添加了一个更好的解释:我的意思是 Spring 以哪种方式实例化我的 Initializer 类?

标签: java spring spring-mvc


【解决方案1】:

servlet 容器在部署时扫描 webapp 的类。这允许它自动注册使用@WebServlet 注释的类作为servlet,注释为@WebFilter 的类作为servlet 过滤器,等等。

它还允许 if 找到实现 javax.servlet.ServletContainerInitializer 的类,并调用它们的 onStartup() 方法,该方法允许初始化程序动态注册 servlet 和过滤器。 Spring类SpringServletContainerInitializer就是这样一个类,它又委托给你自己的Initializer。

【讨论】:

  • 这就是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 1970-01-01
  • 2015-11-12
  • 2011-07-04
相关资源
最近更新 更多