ApplicationContext接口实现(四)
第四种实现也是比较经典的容器实现类,创建的实现类用于实现内嵌Tomcat。适用于Web环境。
一.配置类
@Configurationstatic class WebConfig{@Beanpublic ServletWebServerFactory servletWebServerFactory(){return new TomcatServletWebServerFactory();}@Beanpublic DispatcherServlet dispatcherServlet(){return new DispatcherServlet();}@Beanpublic DispatcherServletRegistrationBean registrationBean(DispatcherServlet dispatcherServlet){return new DispatcherServletRegistrationBean(dispatcherServlet,"/");}@Bean("/hello")public Controller controller1(){return new Controller() {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {response.getWriter().print("hello");return null;}};}}
配置类里面注入了四个Bean,第一个是ServletWebServerFactory内嵌容器,第二个是dispatcherServlet,分发处理控制请求,第三个Bean用来建立两者之间的关系。第四个Bean相当于一个Controller控制器,bean的名字以/开头,并且返回一个Controller接口。访问路径也是使用了bean的名字作为路径。
2.容器类
public static void testAnnotationConfigServletWebServerApplicationContext(){AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);for (String name : context.getBeanDefinitionNames()){System.out.println(name);}}
注册配置类,并打印容器。
3.主类调用
public static void main(String[] args) {//testClassPathXmlApplicationContext();//testFileSystemXmlApplicationContext();/*DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();System.out.println("读取之前....");for(String name : beanFactory.getBeanDefinitionNames()){System.out.println(name);}XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);reader.loadBeanDefinitions(new FileSystemResource("src\\main\\resources\\a01.xml"));System.out.println("读取之后");for(String name : beanFactory.getBeanDefinitionNames()){System.out.println(name);}*///testAnnotationConfigApplicationContext();testAnnotationConfigServletWebServerApplicationContext();}
4.结果输出
5.浏览器访问