Spring完全基于Java和注解配置

Posted woncode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring完全基于Java和注解配置相关的知识,希望对你有一定的参考价值。

要点:

  1. 配置继承WebApplicationInitializer的类作为启动类,相当于配置web.xml文件
  2. 使用@Configuration注解一个类,在类中的方式使用@Bean注解,则表名该方法的返回值为一个Bean,相应于配置applicationContext.xml等spring的xml配置文件

 

配置启动类

继承WebApplicationInitializer并重新onStartup方法,加载配置类,相当于配置web.xml文件

 1 public class WebAppInitConfig implements WebApplicationInitializer {
 2 
 3     @Override
 4     public void onStartup(ServletContext container) throws ServletException {
 5         // Create the ‘root‘ Spring application context
 6         AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
 7         rootContext.register(RootConfig.class);//这是自定义的配置类,这个配置类会影响项目全局
 8 
 9         // Manage the lifecycle of the root application context
10         container.addListener(new ContextLoaderListener(rootContext));
11 
12         // Create the dispatcher servlet‘s Spring application context
13         AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
14         dispatcherContext.register(WebMvcConfig.class);//这是自定义的配置类,这个配置类只会影响当前模块
15 
16         // Register and map the dispatcher servlet
17         ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
18         dispatcher.setLoadOnStartup(1);
19         dispatcher.addMapping("/");
20     }
21 }

 

AnnotationConfigApplicationContext:用来把使用注解的配置类加载到spring容器中,也就是把那些在配置类中定义的bean交给spring管理

也可以使用WebApplicationInitializer的实现类AbstractDispatcherServletInitializerAbstractAnnotationConfigDispatcherServletInitializer来进行更为简洁的配置,官方文档地址,只要实现了WebApplicationInitializer将会被servlet容器自动识别并加载

 

使用AbstractAnnotationConfigDispatcherServletInitializer配置示例如下

 1 public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 2 
 3     @Override
 4     protected Class<?>[] getRootConfigClasses() {
 5         return new Class[]{RootConfig.class};
 6     }
 7 
 8     @Override
 9     protected Class<?>[] getServletConfigClasses() {
10         return new Class[]{WebMvcConfig.class};;
11     }
12 
13     @Override
14     protected String[] getServletMappings() {
15         return new String[]{"/"};
16     }
17 
18 }

 

 

自定义配置类

配置spring管理bean,相应于配置applicationContext.xml等spring的xml配置文件,就是上面使用WebApplicationInitializer加载的类

 1 @Configuration
 2 @EnableWebMvc //注解驱动springMVC 相当于xml中的<mvc:annotation-driven>
 3 @ComponentScan(basePackages = "com.woncode") //启用组件扫描
 4 public class WebMvcConfig extends WebMvcConfigurerAdapter {
 5     //配置静态资源的处理,要求DispatchServlet对静态资源的请求转发到servlet容器中默认的Servlet上
 6     @Override
 7     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
 8         configurer.enable();
 9     }
10 
11     @Override
12     public void addResourceHandlers(ResourceHandlerRegistry registry) {
13         registry.addResourceHandler("/statics/**").addResourceLocations("/WEB-INF/classes/statics/");
14         super.addResourceHandlers(registry);
15     }
16 
17     @Bean
18     public InternalResourceViewResolver viewResolver(){
19         InternalResourceViewResolver resolver= new InternalResourceViewResolver();
20         resolver.setPrefix("/WEB-INF/classes/templates/");
21         resolver.setSuffix(".html");
22         resolver.setExposeContextBeansAsAttributes(true);
23         return resolver;
24     }
25 
26 }

 

@Import注解:用来引入其他配置类到当前配置类,然后就可以在当前配置类中使用其他配置类中的bean了,这在分模块的项目中很有用,因为分模块就是希望分割配置,但是有时又需要使用一些其他已经定义过的配置类,所以可以用此导入

 

以上是关于Spring完全基于Java和注解配置的主要内容,如果未能解决你的问题,请参考以下文章

基于 Java 注解的 Spring 安全配置

spring boot01,spring完全注解(零配置)编程方式

Spring注解与Java元注解小结

Spring @Bean注解 (基于java的容器注解)

什么是基于 Java 的 Spring 注解配置?

什么是基于 Java 的 Spring 注解配置? 给一些注解的例子?