详解Spring MVC4 纯注解配置教程
阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目。
在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式要求又很严格,很不便于开发。而网上所谓的0配置,并不是纯粹的0配置,还是要写一些xml配置,只是用了几个@Service,@Controller注解而已。
在这里,我讲介绍一种新的配置方式,一行XML代码都不需要,什么web.xml,Application-context.xml,Beans.xml,统统去死吧!
首先建立一个Maven项目,Packageing方式为war,项目结构为标准MavenWebApp结构。
pom文件如下(很多依赖都没用,懒得去掉了):
4.0.0 com.csonezp springdemo war 1.0-SNAPSHOT dataplatformMavenWebapp http://maven.apache.org 4.0.1.RELEASE junit junit 4.11 asm asm-commons 2.2.3 asm asm 2.2.3 org.springframework spring-core ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-orm ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-expression ${spring.version} org.springframework spring-test ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-webmvc ${spring.version} cglib cglib 2.2.2 javax.servlet javax.servlet-api 3.0.1 provided jstl jstl 1.2 org.codehaus.jackson jackson-core-asl 1.8.4 org.codehaus.jackson jackson-mapper-asl 1.8.4 c3p0 c3p0 0.9.1.2 log4j log4j 1.2.8 org.json json 20090211 mysql mysql-connector-java 5.1.6 spy spymemcached 2.6 org.slf4j slf4j-api 1.6.6 dataplatform
这个时候,就该进行Spring配置了。按传统方式来的话,首先要去web.xml写一堆配置,然后建立个管理beab的Beans.xml,管理springmvc的xml,再写一坨一坨Bean。就是先进一点的(也就是很多人说的0配置),也就是自己的业务Bean不用写进xml了,还是很麻烦。
而我这里讲的方式,则是完全不修改任何web.xml代码,不写一行XML代码的方式。
首先,在项目立建立一个Config.java文件:
/** *Createdbyzhangpengon16-3-22. *取代Beans.xml,纯注解配置各种BEAN */ @Configuration @ComponentScan("com.csonezp") @EnableWebMvc publicclassConfig{ /** *jsp视图解析器的bean *@return */ @Bean publicUrlBasedViewResolversetupViewResolver(){ UrlBasedViewResolverresolver=newUrlBasedViewResolver(); resolver.setPrefix("/WEB-INF/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); returnresolver; } /** *配置数据源 *@return */ @Bean(name="dataSource") publicComboPooledDataSourcegetDataSource(){ try{ ComboPooledDataSourcedataSource=newComboPooledDataSource(); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mfdb"); dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setUser("root"); dataSource.setPassword("zp1228"); dataSource.setMaxPoolSize(75); returndataSource; }catch(Exceptione){ returnnull; } } }
@Configuration注解就是告诉Spring这个是一个配置文件类,这里配置的Bean要交给Spring去管理。这个就是用来取代Beans.xml这种文件的。
@ComponentScan("com.csonezp")这个注解就是配置包扫描用的,不必多说了
@EnableWebMvc,启用SpringMVC支持
这里面配置了两个Bean,第一个就是JSP的视图解析器,第二个则是配置了一个数据源。这些都可以对应到XML文件里面去的。找一个传统Spring项目,用xml文件对比着我这个类去看,会对这种配置方式有更深的了解。
下面要建立一个WebInitializer类继承WebApplicationInitializer,在这里添加一个servlet。这一步是用来取代在web.xml中添加servlet的步骤
importorg.springframework.web.WebApplicationInitializer; importorg.springframework.web.context.support.AnnotationConfigWebApplicationContext; importorg.springframework.web.servlet.DispatcherServlet; importjavax.servlet.ServletContext; importjavax.servlet.ServletException; importjavax.servlet.ServletRegistration.Dynamic; publicclassWebInitializerimplementsWebApplicationInitializer{ publicvoidonStartup(ServletContextservletContext)throwsServletException{ AnnotationConfigWebApplicationContextctx=newAnnotationConfigWebApplicationContext(); ctx.register(Config.class); ctx.setServletContext(servletContext); Dynamicservlet=servletContext.addServlet("dispatcher",newDispatcherServlet(ctx)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); } }
这样就OK啦!让我们写一些代码来测试一下吧!
importorg.springframework.stereotype.Service; /** *Createdbyzhangpengon16-3-22. */ @Service publicclassHelloService{ publicStringgetHello(Stringname){ returnname+",Hello!"; } }
importcom.guduo.dataplatform.service.HelloService; importcom.guduo.dataplatform.service.MovieService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Controller; importorg.springframework.ui.ModelMap; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestParam; /** *Createdbyzhangpengon16-3-22. */ @Controller @RequestMapping("/test") publicclassTestController{ @Autowired HelloServicehelloService; @Autowired MovieServicemovieService; @RequestMapping("/hello") publicStringsayHello(@RequestParam("name")Stringname,ModelMapmodel){ model.put("hello",helloService.getHello(name)); return"hello"; } }
一个service,一个controller。
启动项目,在浏览器中输入地址http://localhost:8080/dp/test/hello?name=sss
页面显示sss,Hello!
完工!
额,忘了演示Confgig里配置的bean如何使用了。其实和XML里的一样。这里拿一个DAO做演示吧,这里就注入了我们在config里配置的那个数据源
@Repository publicclassMoviePlayIncDao{ privateDataSourcedataSource; privateJdbcTemplatejdbcTemplateObject; @Autowired publicvoidsetDataSource(DataSourcedataSource){ this.dataSource=dataSource; this.jdbcTemplateObject=newJdbcTemplate(dataSource); } publicListgetMoviePlayInc(intmovieId){ try{ StringSQL="select*frommovieplayincreamentwheremovieid=?"; List list=jdbcTemplateObject.query(SQL,newMoviePlayIncMapper(),newObject[]{movieId}); returnlist; }catch(Exceptione){ returnnull; } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。