詳解Spring MVC4 純注解配置教程
閱讀本文需要又一定的sping基礎(chǔ),最起碼要成功的運(yùn)行過一個(gè)SpringMvc項(xiàng)目。
在傳統(tǒng)的Spring項(xiàng)目中,我們要寫一堆的XML文件。而這些XML文件格式要求又很嚴(yán)格,很不便于開發(fā)。而網(wǎng)上所謂的0配置,并不是純粹的0配置,還是要寫一些xml配置,只是用了幾個(gè)@Service,@Controller注解而已。
在這里,我講介紹一種新的配置方式,一行XML代碼都不需要,什么web.xml,Application-context.xml,Beans.xml。
首先建立一個(gè)Maven項(xiàng)目,Packageing方式為war,項(xiàng)目結(jié)構(gòu)為標(biāo)準(zhǔn)Maven WebApp結(jié)構(gòu)。
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>
這個(gè)時(shí)候,就該進(jìn)行Spring配置了。按傳統(tǒng)方式來的話,首先要去web.xml寫一堆配置,然后建立個(gè)管理beab的Beans.xml,管理spring mvc 的xml,再寫一坨一坨Bean。就是先進(jìn)一點(diǎn)的(也就是很多人說的0配置),也就是自己的業(yè)務(wù)Bean不用寫進(jìn)xml了,還是很麻煩。
而我這里講的方式,則是完全不修改任何web.xml代碼,不寫一行XML代碼的方式。
首先,在項(xiàng)目立建立一個(gè)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;
}
/**
* 配置數(shù)據(jù)源
* @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這個(gè)是一個(gè)配置文件類,這里配置的Bean要交給Spring去管理。這個(gè)就是用來取代Beans.xml這種文件的。
@ComponentScan("com.csonezp")這個(gè)注解就是配置包掃描用的,不必多說了
@EnableWebMvc ,啟用Spring MVC支持
這里面配置了兩個(gè)Bean,第一個(gè)就是JSP的視圖解析器,第二個(gè)則是配置了一個(gè)數(shù)據(jù)源。這些都可以對(duì)應(yīng)到XML文件里面去的。找一個(gè)傳統(tǒng)Spring項(xiàng)目,用xml文件對(duì)比著我這個(gè)類去看,會(huì)對(duì)這種配置方式有更深的了解。
下面要建立一個(gè)WebInitializer類繼承WebApplicationInitializer,在這里添加一個(gè)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";
}
}
一個(gè)service,一個(gè)controller。
啟動(dòng)項(xiàng)目,在瀏覽器中輸入地址http://localhost:8080/dp/test/hello?name=sss
頁面顯示sss,Hello!
完工!
額,忘了演示Confgig里配置的bean如何使用了。其實(shí)和XML里的一樣。這里拿一個(gè)DAO做演示吧,這里就注入了我們?cè)赾onfig里配置的那個(gè)數(shù)據(jù)源
@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;
}
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot自定義starter方法及注解實(shí)例
這篇文章主要為大家介紹了springboot自定義starter方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java SpringMVC的@RequestMapping注解使用及說明
這篇文章主要介紹了Java SpringMVC的@RequestMapping注解使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解
這篇文章主要為大家介紹了java?11新特性HttpClient主要組件及發(fā)送請(qǐng)求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果
這篇文章主要為大家詳細(xì)介紹了Java二維數(shù)組實(shí)現(xiàn)數(shù)字拼圖效果,控制臺(tái)可以對(duì)空格進(jìn)行移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
使用SpringBoot請(qǐng)求方式和訪問靜態(tài)頁面
SpringBoot支持多種請(qǐng)求方式,包括GET、RESTful、分頁列表等,常用框架如阿里fastjson、谷歌gson用于JavaBean序列化為Json,性能上Jackson最快,SpringBoot目錄結(jié)構(gòu)包括src/main/java、src/main/resources等2025-01-01
Spring?Data?JPA框架的核心概念與Repository接口詳解
Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開發(fā)者?極簡的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問和操作,本篇我們來了解Spring?Data?JPA框架的核心概念與Repository接口2022-04-04

