版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z498596750/article/details/86672248
spring整合框架的方式分为xml配置文件和java配置两种方式,这里介绍的是以java配置的方式。以下是maven需要导入的jar包。
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc-portlet</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.9</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<scope>runtime</scope>
</dependency>
</dependencies>
首先是spring和mvc的整合,需要创建一个配置类继承 AbstractAnnotationConfigDispatcherServletInitializer 这个类,并实现他的一些方法。代码如下:
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
*
* spring配置,通过创建的RootConfig来替代spring-context文件
* */
protected Class<?>[] getRootConfigClasses() {
return new Class[]{RootConfig.class};
}
/**
*
* mvc配置,通过创建的WebConfig来替代spring-mvc文件
* */
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
*
* 配置web请求方式
* */
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
*
* 针对dispatcherServlet添加过滤器
* */
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return new Filter[]{filter};
}
}
然后再创建RootConfig和WebConfig这两个配置文件,
@Configuration //给这个类加上configuration注解,表明这个类是一个配置类
@ComponentScan(basePackages = {"service.impl","dao"},
excludeFilters ={
@ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)
} ) //开启自动装配的注解,这里针对service的实现类和dao接口。
@EnableAspectJAutoProxy
@MapperScan(basePackages = "dao") //开启针对mapper接口的注入扫描
public class RootConfig {
/**
* 切面不能切controller //这里是一个测试的切面
* */
@Bean
public TestAop testAop(){ return new TestAop(); }
/**
*
* 配置数据源
* */
@Bean
public DataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/learn");
dataSource.setUser("root");
dataSource.setPassword("123456");
dataSource.setInitialPoolSize(10);
dataSource.setMinPoolSize(10);
dataSource.setMinPoolSize(100);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("entity");
return sqlSessionFactoryBean.getObject();
}
}
@Configuration
@EnableWebMvc //表明这是mvc的配置文件,一般@Enable为开头的注解通过后边的单词就可以见名知意
@ComponentScan(basePackages = {"controller"})
public class WebConfig extends WebMvcConfigurerAdapter {
/**
* 配置视图解析器
* */
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver resolver=new InternalResourceViewResolver();
resolver.setPrefix("WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
/**
*
* 配置静态资源访问路径
* */
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resource/**").addResourceLocations("/WEB-INF/static/");
}
/**
* 针对静态资源的处理
* */
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
/**
* 国际化配置信息源
* */
@Bean
public MessageSource messageSource(){
ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
messageSource.setBasename("WEB-INF/international/message");
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(10);
return messageSource;
}
/**
*
* 配置上传文件
* */
@Bean
public MultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("UTF-8");
return multipartResolver;
}
}
如果需要在web.xml中做一些配置,则还需要实现WebApplicationInitializer接口,示例代码如下:
public class LogConfig implements WebApplicationInitializer {
/**
*
*通过实现onStartup方法,并通过servletContext这个参数可以为项目初始化监听器、过滤器以及
*servlet,还可以为项目设置初始化属性以及参数,以下就是为项目配置log4j日志插件的具体代码。
*/
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setAttribute("log4jConfigLocation","resources/log4j.properties");
servletContext.addListener(Log4jConfigListener.class);
}
}
回来RootConfig中的测试aop,示例代码如下:
@Aspect //通过这个注解表明这个类是一个自定义的切面类。
public class TestAop {
//这里是这个切面要切的方法,也就是切点
@Pointcut("execution(* service.impl.UserServiceImpl.insert(..))")
public void insert(){
}
//这里是针对insert方法做的环绕通知
@Around("insert()")
public void huanraoAop(ProceedingJoinPoint proceedingJoinPoint){
System.out.println("方法执行之前");
try {
proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
System.out.println("方法执行之后");
}
}
接下来回到WebConfig中配置的国际化,需要在web-inf下的international创建message.properties文件,以下是文件测试内容
hys=6666666!!!!!
然后需要在jsp中导入标签,具体代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1><spring:message code="hys"/></h1>
<form enctype="multipart/form-data" method="post" action="/save">
<input type="file" name="file"/>
<input type="submit" title="提交"/>
</form>
</body>
</html>
到这里,还需要对mapper的xml文件做一下重构,因为是maven创建的项目,部署到tomcat后,xml并不会被编译,这会导致mybatis的异常,要解决这个问题只需在pom的build标签下添加如下代码:
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>mapper/*.xml</include>
</includes>
</resource>
</resources>
这样,SSM就算是整合成功了,项目地址。https://github.com/13944487443/Spring-mvc-mybatis-