ApplicationContext的实现类有哪些?
口语化答案
好的,面试官。常用的只要用 classpathxml 的基于 xml 的方式,annotion 的基于注解的方式,不常见的还有 web 和 groovy。在目前的实际情况下,主要是 annotion,注解形式放入到容器中。像老的 tomcat 那种方式,用的是 web 形式,不过现在都是 boot 注解形式。groovy 适用于一些动态加载 bean 的方式,通过脚本的形式处理。
题目解析
经典题,问的还比较多,主要是想借此考察一下,你在项目中,都用过什么样的形式的。其实主要答出注解和 xml 这道题就 ok。
面试得分点
xml,注解,web,groovy
题目详细答案
Spring容器配置方式详解(通俗版)
主流配置方式
1. 注解配置(现代开发首选)
@Configuration // 声明这是配置类
@ComponentScan("com.example") // 自动扫描包
public class AppConfig {@Bean // 声明一个Beanpublic DataSource dataSource() {return new HikariDataSource();}
}// 启动容器
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
特点:
- 代码即配置,直观清晰
- Spring Boot默认采用这种方式
- 支持自动装配(@Autowired)
2. XML配置(传统项目使用)
<!-- applicationContext.xml -->
<beans><bean id="userService" class="com.example.UserService"/><bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"/>
</beans>
加载方式:
// 从classpath加载
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");// 从文件系统加载
ApplicationContext context =new FileSystemXmlApplicationContext("C:/config/spring.xml");
特殊场景配置
3. Web应用配置(传统Java Web)
传统web.xml配置:
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-config.xml</param-value>
</context-param>
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
现代无XML方式(Spring 3.0+):
public class MyWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(ServletContext servletContext) {// 创建注解配置的Web容器AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();context.register(AppConfig.class);// 注册DispatcherServletServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(context));dispatcher.addMapping("/");}
}
4. Groovy配置(动态脚本)
Groovy 是一种基于JVM的动态编程语言,可以简单理解为"Java的脚本版兄弟"。
// config.groovy
beans {dataSource(HikariDataSource) {jdbcUrl = "jdbc:mysql://localhost/test"username = "root"password = "123456"}
}
加载方式:
ApplicationContext context = new GenericGroovyApplicationContext("config.groovy");
现代开发建议
- 新项目:直接使用Spring Boot + 注解配置
- 零XML配置
- 自动配置简化开发
- 老项目维护:
- XML配置项目:逐步迁移到注解
- Web项目:考虑升级到Spring Boot
- 动态需求:
- 需要热更新配置 → 考虑Groovy
- 需要兼容旧系统 → 保持XML