纯Java配置的Spring Web项目
通常我们在开发Java Web项目的时候,需要配置很多的XML文件,例如web.xml,servlet的配置文件。如果使用框架,如Spring等,还有Spring的配置文件。
由于使用Java配置Spring比XML更加简结,我们可以使用纯Java配置快速构建Spring Web应用,当然使用Spring Boot是一个更好的选择。
下面我们基于Spring 5 来搭建一个纯Java的Spring web项目。
新建Maven项目
使用IDEA或者ECLIPSE新建一个普通的Java 或者Java Web 项目。
假设我们的包为com.okayjam.spring
引入Maven依赖
配置Spring依赖和servlet依赖,在dependencies
标签下添加如下依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
Java配置类
我们在com.okayjam.spring
包下面新建一个config的包,用来放配置相关的Java类。
新建 WebInitializer
类
这个类主要用来配置bean扫描和web配置类
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { RootConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
新建 RootConfig
类
这个类主要是扫描bean,类实现为空
@Configuration
@ComponentScan(basePackages={"com.okayjam.spring"},
excludeFilters={
@ComponentScan.Filter(type= FilterType.ANNOTATION, value= Controller.class)
})
public class RootConfig {
}
这个类使用了Configuration
注解,说明了是Spring的Java配置类,可以在里面进行bean的定义。官方的说明如下:
The central artifact in Spring JavaConfig is the
@Configuration
-annotated class.These classes consist principally of@Bean
-annotated methods that define instantiation, configuration, and initialization logic for objects that will be managed by the Spring IoC container.An application may make use of just one
@Configuration
-annotated class, or many.
@Configuration
can be considered the equivalent of XML's<beans/>
element. Like<beans/>
, it provides
an opportunity to explicitly set defaults for all enclosed bean definitions.
同时还有ComponentScan
注解,说明要扫描的包,同时忽略Controller
注解,因为这个注解将会由另一个类扫描加载。
新建WebConfig
类
@Configuration
@EnableWebMvc
@ComponentScan("com.okayjam.spring")
public class WebConfig implements WebMvcConfigurer {
/**
* 处理JSP
*/
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
/**
* 处理静态文件
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
到此,Spring web 的配置已经完成了。
接下来我们新建一个Controller测试
@Controller
public class HomeController {
@ResponseBody
@RequestMapping(value = "/hello",method = GET)
public String hello(Model model) {
return "Hello world!";
}
}
使用Maven插件快速运行
这样虽然配置好了,但是需要打包成war包并放到容器tomcat或者jetty才能运行。也可以使用maven运行。
为了使用jetty的maven插件,我们在pom中增加插件,在build
标签中加入
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.12.v20180830</version>
<configuration>
<httpConnector>
<port>80</port><!--端口配置,默认8080-->
</httpConnector>
<!--自动热部署,默认automatic,手动manual-->
<reload>automatic</reload>
<!--与reload相关,默认值是 0。单位为秒。表示文件更改检查时间-->
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
如果需要打包,可以在plugins下加入如下的插件
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
然后在IDEA的maven插件栏中,运行jetty run。或者在命令行运行 jetty:run 。还可以在命令行使用mvn clean package进行打包,如果需要打成war包,需要在pom文件中把打包方式改为war
浏览器访问 http://localhost/hello, 如果输出 “Hello world! ” 则成功了。
基于XML的配置
在WebConfig类的配置中,如果使用我们熟悉的XML,配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启注解-->
<annotation-driven />
<context:component-scan base-package="com.okayjam.spring" />
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<!--/resources/**的资源都从/resources/里面进行查找。-->
<resources mapping="/resources/**" location="/resources/" />
<!-- 默认页
<view-controller path="/" view-name="home" />
-->
</beans:beans>
ref.
https://docs.spring.io/spring/docs/2.5.x/reference/beans.html#beans-factory-scopes-other-injection
欢迎关注我的公众号