zoukankan      html  css  js  c++  java
  • 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文件如下(很多依赖都没用,懒得去掉了):

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.csonezp</groupId>
        <artifactId>springdemo</artifactId>
        <packaging>war</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>dataplatform Maven Webapp</name>
        <url>http://maven.apache.org</url>
        <properties>
            <spring.version>4.0.1.RELEASE</spring.version>
        </properties>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
            </dependency>
    
            <!-- Spring dependencies -->
            <dependency>
                <groupId>asm</groupId>
                <artifactId>asm-commons</artifactId>
                <version>2.2.3</version>
            </dependency>
            <dependency>
                <groupId>asm</groupId>
                <artifactId>asm</artifactId>
                <version>2.2.3</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>
    
    
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
            <!-- Servlet API, JSTL -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-core-asl</artifactId>
                <version>1.8.4</version>
            </dependency>
    
            <dependency>
                <groupId>org.codehaus.jackson</groupId>
                <artifactId>jackson-mapper-asl</artifactId>
                <version>1.8.4</version>
            </dependency>
    
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
    
    
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.8</version>
            </dependency>
    
    
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20090211</version>
            </dependency>
    
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.6</version>
            </dependency>
    
            <dependency>
                <groupId>spy</groupId>
                <artifactId>spymemcached</artifactId>
                <version>2.6</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.6.6</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>dataplatform</finalName>
        </build>
    </project>

    这个时候,就该进行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.setUser("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<MoviePlayIncreament> getMoviePlayInc(int movieId) {
            try {
                String SQL = "select * from movieplayincreament where movieid=?";
                List<MoviePlayIncreament> list = jdbcTemplateObject.query(SQL, new MoviePlayIncMapper(), new Object[]{movieId});
                return list;
            } catch (Exception e) {
                return null;
            }
        }
    
    
    }
  • 相关阅读:
    软件工程实践2017第一次作业
    第七次作业
    图结构练习——最短路径(floyd算法(弗洛伊德))
    图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
    图结构练习——最小生成树(kruskal算法(克鲁斯卡尔))
    图结构练习——最小生成树(prim算法(普里姆))
    基于邻接矩阵的深度优先搜索遍历
    基于邻接表的深度优先搜索遍历
    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
    数据结构实验之图论二:基于邻接表的广度优先搜索遍历
  • 原文地址:https://www.cnblogs.com/csonezp/p/5315725.html
Copyright © 2011-2022 走看看