`
NeverFlyAway
  • 浏览: 69567 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Spring no xml的各种配置及单元测试

阅读更多

不使用任何xml配置文件,也没有web.xml,只用注解来配置Spring,整合Hibernate,Mybatis,Spring MVC以及其他Spring的开源项目。

仅供参考,风格不同,个人喜好。

 

Class风格的web.xml

 

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

@Order(Ordered.LOWEST_PRECEDENCE)
public class WebInit implements WebApplicationInitializer{

	@Override
	public void onStartup(ServletContext container) throws ServletException {
		// Create the 'root' Spring application context
				AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
				rootContext.scan("com.demo.config.spring");
				// Manage the lifecycle of the root application context
				container.addListener(new ContextLoaderListener(rootContext));
				// Listener that exposes the request to the current thread
				container.addListener(new RequestContextListener());
				// Create the dispatcher servlet's Spring application context
				AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
				// Register and map the dispatcher servlet
				ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
				dispatcher.setLoadOnStartup(1);
				dispatcher.addMapping("/");
	}

}

 

rootContext.scan("com.demo.config.spring")

 

这是用来扫描ApplicationContext的,也使用no xml实现,所以这里是扫package

 

Class风格的ApplicationContext

import java.util.Properties;

import javax.sql.DataSource;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTemplate;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

import com.demo.config.constant.BaseConst;
import com.demo.config.constant.MySQLConst;

@Configuration
@Profile(value = { "default" })
@EnableWebMvc
@EnableScheduling
@EnableTransactionManagement
@MapperScan(basePackages = "com.demo.dao")
@ComponentScan(basePackages = "com.demo")
public class WebContext extends WebMvcConfigurerAdapter{
	
	@Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
	}
	
	@Bean
	public ViewResolver viewResolver(){
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setViewClass(JstlView.class);
		viewResolver.setPrefix("/pages/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}
	
	@Bean(name = "dataSourceMySQL")
	public DataSource dataSourceMySQL() {
		DriverManagerDataSource source = new DriverManagerDataSource();
		source.setUrl(MySQLConst.MYSQL_URL);
		source.setDriverClassName(MySQLConst.MYSQL_DRIVER);
		source.setUsername(MySQLConst.MYSQL_USER_NAME);
		source.setPassword(MySQLConst.MYSQL_PASSWORD);
		return source;
	}
	
	@Bean
	public JdbcTemplate jdbcTemplate(DataSource dataSourceMySQL){
		return new JdbcTemplate(dataSourceMySQL);
	}
	
	@Bean(name = "sqlSessionFactory")
	public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSourceMySQL){
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(dataSourceMySQL);
		sqlSessionFactory.setTypeAliasesPackage("com.demo.entity");
		return sqlSessionFactory;
	}
	
	@Bean
	public PlatformTransactionManager transactionManager(DataSource dataSourceMySQL) {
		DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
		transactionManager.setDataSource(dataSourceMySQL);
		return transactionManager;
	}
	
	@Bean(name = "hibernateSessionFactory")
	public LocalSessionFactoryBean localSessionFactoryBean(DataSource dataSourceMySQL) {
		LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
		sessionFactoryBean.setDataSource(dataSourceMySQL);
		sessionFactoryBean.setPackagesToScan("com.demo.entity");
		Properties properties = new Properties();
		properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
		properties.setProperty("hibernate.show_sql", BaseConst.HIBERNATE_SHOW_SQL.toString());
		properties.setProperty("hibernate.default_schema", "demo");
		properties.setProperty("connection.driver_class", MySQLConst.MYSQL_DRIVER);
		properties.setProperty("connection.url", MySQLConst.MYSQL_URL);
		properties.setProperty("connection.username", MySQLConst.MYSQL_USER_NAME);
		properties.setProperty("connection.password", MySQLConst.MYSQL_PASSWORD);
		sessionFactoryBean.setHibernateProperties(properties);
		return sessionFactoryBean;
	}
	
	@Bean
	public HibernateTemplate hibernateTemplate(LocalSessionFactoryBean hibernateSessionFactory){
		return new HibernateTemplate(hibernateSessionFactory.getObject());
	}
	
	@Bean(name = "threadPoolTaskExecutor")
	public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
		ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();  
		poolTaskExecutor.setCorePoolSize(5);  //线程池维护线程的最少数量 
		poolTaskExecutor.setQueueCapacity(5); //线程池所使用的缓冲队列   
		poolTaskExecutor.setMaxPoolSize(10);  //线程池维护线程的最大数量  
		poolTaskExecutor.setKeepAliveSeconds(30000); //线程池维护线程所允许的空闲时间 
		return poolTaskExecutor;
	}

 

整合MySQL,Hibernate,MyBatis,顺便配置了一下Spring事务管理和Spring线程池

 

单元测试的配置如下:

package com.demo.dao;

import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Commit;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.transaction.annotation.Transactional;

import com.demo.config.spring.WebContext;
import com.demo.entity.Application;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = WebContext.class)
@WebAppConfiguration
@Transactional
public class ApplicationTest {

	@Autowired
	private SqlSessionFactory sqlSessionFactory;
	
	@Commit
	@Test
	public void testInsert() {
		Application app = new Application();
		sqlSessionFactory.openSession().getMapper(ApplicationMapper.class).insert(app);
	}
	
}

 

以上

1
2
分享到:
评论
1 楼 7454103 2016-05-03  

相关推荐

    spring配置.txtspring配置.txt

    在XML配置文件中,通常会定义各种bean,以及它们之间的依赖关系。例如,在给定的部分内容中: ```xml <param-name>contextConfigLocation <param-value>/WEB-INF/.xml ``` 这段代码用于指定Spring配置文件的...

    Spring中Quartz的配置

    ### Spring中Quartz的配置详解 ...从创建被调度的类到配置Spring上下文,再到测试程序的编写,每一个环节都至关重要。理解并掌握这些配置细节,可以帮助开发者更加高效地完成任务调度功能的开发。

    spring-rest-no-xml:简单的核心项目,显示无 xml spring 配置并将 Ports&Adapters 架构与 DDD 相结合

    Spring无xml配置 Spring启动应用程序 单元测试完全覆盖的 TDD 项目 参考资料 VAUGHN VERNON:实现领域驱动设计 SLAWOMIR SOBOTKA/BottegaIT : ddd-leaven-v2 项目 DDD博客: : Spring no-xml with baeldung.com 和...

    spring的Bean配置说明

    Spring使用XML配置文件来描述这些Bean及其依赖关系。以下是对Spring Bean配置的详细解释: 1. `<beans>` 根元素:这是Spring配置文件的起点,它包含了所有的Bean定义。Spring容器会解析这个文件并创建相应的Bean...

    Spring配置文件

    1. **XML配置文件**:Spring最初主要通过XML文件进行配置,这些文件通常以`applicationContext.xml`为名,位于项目的`src/main/resources`目录下。XML配置文件包含了Bean的定义、属性、依赖关系以及其他配置信息。...

    spring MVC No Session found for current thread

    在Spring的web.xml文件中,DispatcherServlet需要配置为处理session,例如: ```xml <servlet-name>dispatcher <servlet-class>org.springframework.web.servlet.DispatcherServlet <param-name>...

    springcloud config server 服务配置中心 服务器端

    2. **POM.xml**:Maven配置文件,定义项目依赖,包括Spring Cloud Config的相关依赖。 3. **启动类**:配置Spring Boot应用的启动入口,启用Config Server的相关配置。 4. **Git仓库配置**:可能有示例配置文件,...

    解决osgi spring 事务配置问题

    这段XML配置表明`myServiceImpl`服务需要参与到JTA(Java Transaction API)管理的事务中,`transactionManager`则是事务管理器的引用。 另一个关键点是确保事务管理器(如Atomikos或Bitronix)在OSGi环境中正确...

    spring配置文件解析失败报”cvc-elt.1: 找不到元素 ''beans'' 的声明”异常解决

    当遇到“cvc-elt.1: 找不到元素 'beans' 的声明”这种异常时,通常意味着Spring在尝试解析XML配置文件时遇到了问题。这个错误提示表明XML解析器无法找到`<beans>`元素的定义,这是一个基本的Spring配置文件结构元素...

    spring02-3

    在Spring的XML配置文件中,当一个bean定义使用`parent`属性引用另一个bean定义时,它将继承父bean的所有属性,包括初始化方法、属性注入等。这种方式可以实现配置的复用,减少重复代码,提高可维护性。例如,我们...

    实例化Spring bean的两种工厂方法

    实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置等。而工厂方法是其中一种自定义实例化过程的方法。 1. **实例工厂方法** 实例工厂方法是通过一个具体的工厂类实例来创建Spring Bean。在...

    SPRING面试宝典

    - **测试模块**:提供了对Spring组件进行单元测试的支持。 - **其他模块**:如AOP、消息传递等高级功能模块。 **1.4 解释核心容器(Application context)模块** 核心容器是Spring框架的核心,它提供了依赖注入的...

    Spring中Quartz的配置[总结].pdf

    Spring使用XML配置文件来定义bean,如下所示: ```xml <!-- 被调度的工作类 --> <!-- 定义调用对象和调用对象的方法 --> <bean id="jobtask" class="org.springframework.scheduling.quartz....

    图解MyEclipse配置struts+hibernate+spring+FreeMarker.rar

    2. 采用注解配置,减少XML配置文件的复杂性。 3. 设计良好的模块化结构,提高代码复用和可维护性。 4. 利用Spring AOP实现事务管理,提高代码的可读性和可维护性。 5. 使用单元测试和集成测试,确保代码质量。 以上...

    Spring+MyBatis scott用户根据 no 查找数据

    1. **Spring配置MyBatis**:在Spring应用中集成MyBatis,需要配置MyBatis的SqlSessionFactoryBean,指定配置文件、Mapper接口的位置等。例如: ```xml <bean id="sqlSessionFactory" class="org.springframework....

    Spring自动装配解析

    在Spring的XML配置文件中,可以通过`<beans>`标签的`autowire`属性来全局设置自动装配策略,或者在单个`<bean>`标签中通过`autowire`属性指定某一个bean的自动装配方式。 4. 使用注解进行自动装配 Spring 2.5引入了...

    Using Spring from Scratch

    1. **XML配置**:Spring早期的配置主要通过XML文件进行,例如`Spring_3.2.2.1. Composing XML-based configuration metadata`,这部分内容会讲述如何在XML中定义bean,如何管理它们的依赖关系,以及如何组合多个XML...

    no-xml-springmvc:这是一个不使用web.xml等xml配置文件而使用Java Configuration形式的SpringMVC Demo

    因此,Spring框架引入了Java Configuration,它允许我们用Java代码来替代XML配置,从而实现更加灵活和易于理解的配置方式。本Demo,"no-xml-springmvc",就是基于这一理念构建的。 在不使用XML配置的情况下,...

    No bean named xxx available报错解决

    在Spring中,如果我们想要让这些类成为Spring管理的bean,我们需要通过注解或XML配置来声明它们。在这个案例中,看起来我们打算使用注解方式来实现自动注入。 1. **Address类**: 我们可以在Address类上使用`@...

    spring自定义编辑器

    2. **在Spring配置文件**(如`applicationContext.xml`)中进行必要的配置。 3. **编写一个简单的测试类**来验证自定义编辑器的效果。 #### 三、创建InjectDate类 首先,我们需要创建一个名为`InjectDate`的类,...

Global site tag (gtag.js) - Google Analytics