不使用任何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); } }
以上
相关推荐
在XML配置文件中,通常会定义各种bean,以及它们之间的依赖关系。例如,在给定的部分内容中: ```xml <param-name>contextConfigLocation <param-value>/WEB-INF/.xml ``` 这段代码用于指定Spring配置文件的...
### Spring中Quartz的配置详解 ...从创建被调度的类到配置Spring上下文,再到测试程序的编写,每一个环节都至关重要。理解并掌握这些配置细节,可以帮助开发者更加高效地完成任务调度功能的开发。
Spring无xml配置 Spring启动应用程序 单元测试完全覆盖的 TDD 项目 参考资料 VAUGHN VERNON:实现领域驱动设计 SLAWOMIR SOBOTKA/BottegaIT : ddd-leaven-v2 项目 DDD博客: : Spring no-xml with baeldung.com 和...
Spring使用XML配置文件来描述这些Bean及其依赖关系。以下是对Spring Bean配置的详细解释: 1. `<beans>` 根元素:这是Spring配置文件的起点,它包含了所有的Bean定义。Spring容器会解析这个文件并创建相应的Bean...
1. **XML配置文件**:Spring最初主要通过XML文件进行配置,这些文件通常以`applicationContext.xml`为名,位于项目的`src/main/resources`目录下。XML配置文件包含了Bean的定义、属性、依赖关系以及其他配置信息。...
在Spring的web.xml文件中,DispatcherServlet需要配置为处理session,例如: ```xml <servlet-name>dispatcher <servlet-class>org.springframework.web.servlet.DispatcherServlet <param-name>...
2. **POM.xml**:Maven配置文件,定义项目依赖,包括Spring Cloud Config的相关依赖。 3. **启动类**:配置Spring Boot应用的启动入口,启用Config Server的相关配置。 4. **Git仓库配置**:可能有示例配置文件,...
这段XML配置表明`myServiceImpl`服务需要参与到JTA(Java Transaction API)管理的事务中,`transactionManager`则是事务管理器的引用。 另一个关键点是确保事务管理器(如Atomikos或Bitronix)在OSGi环境中正确...
当遇到“cvc-elt.1: 找不到元素 'beans' 的声明”这种异常时,通常意味着Spring在尝试解析XML配置文件时遇到了问题。这个错误提示表明XML解析器无法找到`<beans>`元素的定义,这是一个基本的Spring配置文件结构元素...
在Spring的XML配置文件中,当一个bean定义使用`parent`属性引用另一个bean定义时,它将继承父bean的所有属性,包括初始化方法、属性注入等。这种方式可以实现配置的复用,减少重复代码,提高可维护性。例如,我们...
实例化Spring Bean的方式多种多样,包括XML配置、注解配置以及Java配置等。而工厂方法是其中一种自定义实例化过程的方法。 1. **实例工厂方法** 实例工厂方法是通过一个具体的工厂类实例来创建Spring Bean。在...
- **测试模块**:提供了对Spring组件进行单元测试的支持。 - **其他模块**:如AOP、消息传递等高级功能模块。 **1.4 解释核心容器(Application context)模块** 核心容器是Spring框架的核心,它提供了依赖注入的...
Spring使用XML配置文件来定义bean,如下所示: ```xml <!-- 被调度的工作类 --> <!-- 定义调用对象和调用对象的方法 --> <bean id="jobtask" class="org.springframework.scheduling.quartz....
2. 采用注解配置,减少XML配置文件的复杂性。 3. 设计良好的模块化结构,提高代码复用和可维护性。 4. 利用Spring AOP实现事务管理,提高代码的可读性和可维护性。 5. 使用单元测试和集成测试,确保代码质量。 以上...
1. **Spring配置MyBatis**:在Spring应用中集成MyBatis,需要配置MyBatis的SqlSessionFactoryBean,指定配置文件、Mapper接口的位置等。例如: ```xml <bean id="sqlSessionFactory" class="org.springframework....
在Spring的XML配置文件中,可以通过`<beans>`标签的`autowire`属性来全局设置自动装配策略,或者在单个`<bean>`标签中通过`autowire`属性指定某一个bean的自动装配方式。 4. 使用注解进行自动装配 Spring 2.5引入了...
1. **XML配置**:Spring早期的配置主要通过XML文件进行,例如`Spring_3.2.2.1. Composing XML-based configuration metadata`,这部分内容会讲述如何在XML中定义bean,如何管理它们的依赖关系,以及如何组合多个XML...
因此,Spring框架引入了Java Configuration,它允许我们用Java代码来替代XML配置,从而实现更加灵活和易于理解的配置方式。本Demo,"no-xml-springmvc",就是基于这一理念构建的。 在不使用XML配置的情况下,...
在Spring中,如果我们想要让这些类成为Spring管理的bean,我们需要通过注解或XML配置来声明它们。在这个案例中,看起来我们打算使用注解方式来实现自动注入。 1. **Address类**: 我们可以在Address类上使用`@...
2. **在Spring配置文件**(如`applicationContext.xml`)中进行必要的配置。 3. **编写一个简单的测试类**来验证自定义编辑器的效果。 #### 三、创建InjectDate类 首先,我们需要创建一个名为`InjectDate`的类,...