SSM_基于JavaConfig(不使用XML配置文件)整合Spring&SpringMVC&Mybatis

  1. 在pom.xml中导入相关依赖
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.ssm</groupId>
  <artifactId>ssm-integration</artifactId>
  <version>1.0.0</version>
  <packaging>war</packaging>
  
  <properties>
  	<spring-version>5.2.2.RELEASE</spring-version>
  	<mybatis-version>3.4.6</mybatis-version>
  	<mybatis-spring-version>2.0.3</mybatis-spring-version>
  	<dbcp-version>2.7.0</dbcp-version>
  	<mysql-version>5.1.47</mysql-version>
  	<log4j-version>1.2.17</log4j-version>
  	<war-plugin-version>3.2.3</war-plugin-version>
  </properties>
  <dependencies>
  	<!--  
  		spring-web mvc
  		spring jdbc
  		mybatis
  		mybatis-spring
  		dbcp
  		
  		mysql
  		log4j
		...  		
  	 -->
  	 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-webmvc</artifactId>
	    <version>${spring-version}</version>
	</dependency>
  	 <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>${spring-version}</version>
	</dependency>
	  	 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>${mybatis-version}</version>
	</dependency>
	  	 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>${mybatis-spring-version}</version>
	</dependency>
	  	 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
	<dependency>
	    <groupId>org.apache.commons</groupId>
	    <artifactId>commons-dbcp2</artifactId>
	    <version>${dbcp-version}</version>
	</dependency>
	  	 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>${mysql-version}</version>
	</dependency>
	  	 <!-- https://mvnrepository.com/artifact/log4j/log4j -->
	<dependency>
	    <groupId>log4j</groupId>
	    <artifactId>log4j</artifactId>
	    <version>${log4j-version}</version>
	</dependency>
	  	 
  </dependencies>
  
  <build>
  	<plugins>
  		<!-- 3.0以上版本不强制添加web.xml -->
  		<plugin>
	        <groupId>org.apache.maven.plugins</groupId>
	        <artifactId>maven-war-plugin</artifactId>
	        <version>${war-plugin-version}</version>
	      </plugin>
  	</plugins>
  </build>
</project>
  1. 创建WebAppInit类(相当于web.xml)
package com.aowin;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * web.xml
 * @author 83998
 *
 */
public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {
	/**
	 * applicationContext.xml
	 */
	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class };
	}

	/**
	 * springDispatcherServlet-servlet.xml
	 */
	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebMvcConfig.class };
	}

	/**
	 * springDispatcherServlet-servlet.xml's url-pattern
	 */
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}
}

  1. 定义WebMVCConfig类
package com.aowin;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * springDispatcherServlet-servlet.xml
 * @author 83998
 *
 */
@Configuration
@EnableWebMvc
@ComponentScan("com.test.controller")
public class WebMvcConfig implements WebMvcConfigurer {
	/**
	 * 可以加载静态资源
	 */
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
}
  1. 定义数据源配置类DataSourceConfig
package com.aowin;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;
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;

@Configuration
@PropertySource("classpath:jdbc.properties")
public class DataSourceConfig {
	@Value("${jdbc.driver}")
	private String driver;
	@Value("${jdbc.url}")
	private String url;
	@Value("${jdbc.username}")
	private String username;
	@Value("${jdbc.password}")
	private String password;

	/**
	 * 配置数据源 dbcp2
	 * @return
	 */
	@Bean
	public DataSource dataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName(driver);
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		return dataSource;
	}
}

  1. 定义RootConfig类
package com.aowin;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * applicationContext.xml
 * @author 83998
 *
 */
@Configuration
@Import(DataSourceConfig.class)
@EnableTransactionManagement
@ComponentScan("com.test.service.impl")
public class RootConfig {

	/**
	 * 创建sqlSessionFactory
	 * @return
	 * @throws Exception 
	 */
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
		return sqlSessionFactoryBean.getObject();
	}

	/**
	 * 创建Mapper接口的代理对象
	 * @return
	 */
	@Bean
	public MapperScannerConfigurer mapperScannerConfigurer() {
		MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
		mapperScannerConfigurer.setBasePackage("com.test.dao");
		return mapperScannerConfigurer;
	}

	/**
	 * 事务管理器
	 * @param dataSource
	 * @return
	 */
	@Bean
	public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
		DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
		dataSourceTransactionManager.setDataSource(dataSource);
		return dataSourceTransactionManager;
	}
}

注意:

  1. RootConfig和WebMvcConfig都是在WebAppInit调用时new出来的两个IOC容器,所以这两个类中不能通过添加@AutoWired或者@Value等注解给属性赋值。因为通过注解完成依赖注入是IOC容器的任务,IOC容器不能在自身初始化的过程中给自己完成依赖注入。
发布了340 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Chill_Lyn/article/details/103830382