接下来讲解基于Gredle工具、以纯注解的方式搭建SSM框架的开发环境。
搭建环境:
1.Gredle4.8;
2.IDEA2018.2.3;
1.首先需要创建一个Gredle项目,勾选java和web两个选项,之后GroupID和项目名称自定义即可;
2. 在build.gradle文件中导入jar文件,如下:
plugins {
id 'java'
id 'war'
}
group 'xyz.lsm1998'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
// jstl
compile "javax.servlet:jstl:1.2"
// servlet3.1
compile "javax.servlet:javax.servlet-api:3.1.0"
// spring框架系列
compile "org.springframework:spring-web:5.0.8.RELEASE"
compile "org.springframework:spring-core:5.0.8.RELEASE"
compile "org.springframework:spring-beans:5.0.8.RELEASE"
compile "org.springframework:spring-webmvc:5.0.8.RELEASE"
compile "org.springframework:spring-tx:5.0.8.RELEASE"
compile "org.springframework:spring-context:5.0.8.RELEASE"
compile "org.springframework:spring-context-support:5.0.8.RELEASE"
compile "org.springframework:spring-jdbc:5.0.8.RELEASE"
compile "org.springframework:spring-test:5.0.8.RELEASE"
compile "org.springframework:spring-aop:5.0.8.RELEASE"
compile "org.aspectj:aspectjweaver:1.8.9"
// 阿里巴巴连接池
compile "com.alibaba:druid:1.1.7"
// mysql
compile "mysql:mysql-connector-java:5.1.46"
// mybatis框架
compile "org.mybatis:mybatis-spring:1.3.2"
compile "org.mybatis:mybatis:3.4.6"
// gson
compile "com.google.code.gson:gson:2.8.0"
}
3.在src/main/java文件下创建一个配置文件包,xyz.lsm1998.config,这个包内放置所有的配置类,首先编写一个容器初始化的配置类SpringServletContainerInitializer:
package xyz.lsm1998.config;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.web.WebApplicationInitializer;
import javax.servlet.ServletContainerInitializer;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.HandlesTypes;
import java.lang.reflect.Modifier;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
/**
* ServletContainerInitializer 是 Servlet 3.0 新增的一个接口,
* 主要用于在容器启动阶段通过自定义的方式注册Filter, Servlet以及Listener,
* 以取代通过web.xml配置注册,利于开发内聚的web应用框架。
* 对于简单的web应用来说,这个类是可以省略的,因为大多数时候不需要自定义
*/
@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer
{
@Override
public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
throws ServletException
{
List<WebApplicationInitializer> initializers = new LinkedList<>();
if (webAppInitializerClasses != null)
{
for (Class<?> waiClass : webAppInitializerClasses)
{
if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&
WebApplicationInitializer.class.isAssignableFrom(waiClass))
{
try
{
initializers.add((WebApplicationInitializer) waiClass.newInstance());
} catch (Throwable ex)
{
throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
}
}
}
}
if (initializers.isEmpty())
{
servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
return;
}
servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
AnnotationAwareOrderComparator.sort(initializers);
for (WebApplicationInitializer initializer : initializers)
{
initializer.onStartup(servletContext);
}
}
}
4.在resources配置文件夹下定义jdbc.properties来声明jdbc配置:
jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=UTF-8
jdbcUser=root
jdbcPassword=123456
5.在xyz.lsm1998.config包内建立AppRootConfig类:
package xyz.lsm1998.config;
import javax.sql.DataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 这个配置类用于取代applicationContext.xml配置文件
*/
@Configuration
@PropertySource("classpath:jdbc.properties")
public class AppRootConfig
{
public AppRootConfig()
{
System.out.println("AppRootConfig配置文件开始加载");
}
// 阿里巴巴数据源
@Bean
public DruidDataSource getDataSource(
@Value("${jdbcDriver}") String driver,
@Value("${jdbcUrl}") String url,
@Value("${jdbcUser}") String username,
@Value("${jdbcPassword}") String password)
{
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
// 根据数据源产生SessionFactory
@Bean("sqlSessionFactory")
public SqlSessionFactoryBean getFactory(@Autowired DataSource ds)
{
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(ds);
return factory;
}
// 扫描mapper接口
@Bean
public MapperScannerConfigurer getScanner()
{
MapperScannerConfigurer scanner = new MapperScannerConfigurer();
scanner.setBasePackage("xyz.lsm1998.mapper");
scanner.setSqlSessionFactoryBeanName("sqlSessionFactory");
return scanner;
}
}
6.在xyz.lsm1998.config包内建立MyConfig类:
package xyz.lsm1998.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 由于配置类继承WebMvcConfigurerAdapter类已经过时,
* 所以采用自定义配置类实现WebMvcConfigurer接口
*/
@Configuration
public class MyConfig implements WebMvcConfigurer
{
}
7.在xyz.lsm1998.config包内建立AppServletConfig类:
package xyz.lsm1998.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
/**
* 这个配置类用于取代spring-mvc.xml配置文件
*/
@Configuration
@ComponentScan("xyz.lsm1998")
@EnableWebMvc
public class AppServletConfig extends MyConfig
{
// 加载一个视图解析器
@Override
public void configureViewResolvers(ViewResolverRegistry registry)
{
registry.jsp("/WEB-INF/jsp/", ".jsp");
}
}
8.在xyz.lsm1998.config包内建立AppWebInitializer类:
package xyz.lsm1998.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
* 这个配置类用于取代web.xml配置文件
*/
public class AppWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
protected Class<?>[] getRootConfigClasses()
{
return new Class[]{AppRootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class[]{AppServletConfig.class};
}
// 前端控制器拦截.do后缀的请求
@Override
protected String[] getServletMappings()
{
return new String[]{"*.do"};
}
}
至此,基于Gredle的纯注解方式搭建SSM框架环境已经大功告成,其他的controller、domain、service等包读者自行创建。