详解Spring MVC4 纯注解配置教程

网友投稿 241 2023-05-19


详解Spring MVC4 纯注解配置教程

阅读本文需要又一定的sping基础,最起码要成功的运行过一个SpringMvc项目。

在传统的Spring项目中,我们要写一堆的XML文件。而这些XML文件格式要求又很严格,很不便于开发。而网上所谓的0配置,并不是纯粹的0配置,还是要写一些xml配置,只是用了几个@Service,@Controller注解而已。

在这里,我讲介绍一种新的配置方式,一行XML代码都不需要,什么web.xml,Application-context.xml,Beans.xml,统统去死吧!

首先建立一个Maven项目,Packageing方式为war,项目结构为标准Maven WebApp结构。

pom文件如下(很多依赖都没用,懒得去掉了):

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.csonezp

springdemo

war

1.0-SNAPSHOT

dataplatform Maven Webapp

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

org.json

json

20090211

mysql

mysql-connector-java

5.1.6

spy

spymemcached

2.6

org.slf4j

slf4j-api

1.6.6

dataplatform

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.csonezp

springdemo

war

1.0-SNAPSHOT

dataplatform Maven Webapp

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

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,管理spring mvc 的xml,再写一坨一坨Bean。就是先进一点的(也就是很多人说的0配置),也就是自己的业务Bean不用写进xml了,还是很麻烦。

而我这里讲的方式,则是完全不修改任何web.xml代码,不写一行XML代码的方式。

首先,在项目立建立一个Config.java文件:

/**

* Created by zhangpeng on 16-3-22.

* 取代Beans.xml,纯注解配置各种BEAN

*/

@Configuration

@ComponentScan("com.csonezp")

@EnableWebMvc

public class Config {

/**

* jsp视图解析器的bean

* @return

*/

@Bean

public UrlBasedViewResolver setupViewResolver() {

UrlBasedViewResolver resolver = new UrlBasedViewResolver();

resolver.setPrefix("/WEB-INF/");

resolver.setSuffix(".jsp");

resolver.setViewClass(JstlView.class);

return resolver;

}

/**

* 配置数据源

* @return

*/

@Bean(name = "dataSource")

public ComboPooledDataSource getDataSource() {

try {

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mfdb");

dataSource.setDriverClass("com.mysql.jdbc.Driver");

dataSource.setUserfTbzMmjQLp("root");

dataSource.setPassword("zp1228");

dataSource.setMaxPoolSize(75);

return dataSource;

} catch (Exception e) {

return null;

}

}

}

@Configuration注解就是告诉Spring这个是一个配置文件类,这里配置的Bean要交给Spring去管理。这个就是用来取代Beans.xml这种文件的。

@ComponentScan("com.csonezp")这个注解就是配置包扫描用的,不必多说了

@EnableWebMvc ,启用Spring MVC支持

这里面配置了两个Bean,第一个就是JSP的视图解析器,第二个则是配置了一个数据源。这些都可以对应到XML文件里面去的。找一个传统Spring项目,用xml文件对比着我这个类去看,会对这种配置方式有更深的了解。

下面要建立一个WebInitializer类继承WebApplicationInitializer,在这里添加一个servlet。这一步是用来取代在web.xml中添加servlet的步骤

import org.springframework.web.WebApplicationInitializer;

import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRegistration.Dynamic;

public class WebInitializer implements WebApplicationInitializer {

public void onStartup(ServletContext servletContext) throws ServletException {

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

ctx.register(Config.class);

ctx.setServletContext(servletContext);

Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));

servlet.addMapping("/");

servlet.setLoadOnStartup(1);

}

}

这样就OK啦!让我们写一些代码来测试一下吧!

import org.springframework.stereotype.Service;

/**

* Created by zhangpeng on 16-3-22.

*/

@Service

public class HelloService {

public String getHello(String name) {

return name + ",Hello!";

}

}

import com.guduo.dataplatform.service.HelloService;

import com.guduo.dataplatform.service.MovieService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

/**

* Created by zhangpeng on 16-3-22.

*/

@Controller

@RequestMapping("/test")

public class TestController {

@Autowired

HelloService helloService;

@Autowired

MovieService movieService;

@RequestMapping("/hello")

public String sayHello(@RequestParam("name") String name, ModelMap model) {

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

public class MoviePlayIncDao {

private DataSource dataSource;

private JdbcTemplate jdbcTemplateObject;

@Autowired

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

this.jdbcTemplateObject = new JdbcTemplate(dataSource);

}

public List getMoviePlayInc(int movieId) {

try {

String SQL = "select * from movieplayincreament where movieid=?";

List list = jdbcTemplateObject.query(SQL, new MoviePlayIncMapper(), new Object[]{movieId});

return list;

} catch (Exception e) {

return null;

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 关键字 速查表介绍
下一篇:Bootstrap里的文件分别代表什么意思及其引用方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~