项目目录结构

从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,

这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,

并用于构建bean定义,初始化Spring容器 

  • 替代web.xml

WebApplicationInitializer.java

  1. package javaConfiguration;
  2.  
  3. import javaConfiguration.RootConfig;
  4. import javaConfiguration.WebConfig;
  5. import org.springframework.web.filter.CharacterEncodingFilter;
  6. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  7.  
  8. import javax.servlet.Filter;
  9. import java.util.logging.Logger;
  10. /*
  11. * Spring Mvc的配置
  12. *createDate: 2018年12月21日
  13. * author: dz
  14. * */
  15. public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  16. private final static Logger LOG = Logger.getLogger(String.valueOf(WebAppInitializer.class));
  17.  
  18. @Override
  19. protected Class<?>[] getRootConfigClasses() {
  20. LOG.info("root配置类初始化");
  21. return new Class<?>[]{RootConfig.class};
  22. }
  23.  
  24. @Override
  25. protected Class<?>[] getServletConfigClasses() {
  26. LOG.info("------web配置类初始化------");
  27. return new Class<?>[]{WebConfig.class};
  28. }
  29.  
  30. @Override
  31. protected String[] getServletMappings() {
  32. LOG.info("------映射根路径初始化------");
  33. return new String[]{"/"};//请求路径映射,根路径
  34. }
  35.  
  36. @Override
  37. protected Filter[] getServletFilters() {
  38. LOG.info("-----编码过滤配置-------");
  39. CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter("UTF-8");
  40. return new Filter[]{encodingFilter};
  41. }
  42. }

WebConfig.java

  1. package javaConfiguration;
  2.  
  3. import org.springframework.context.annotation.ComponentScan;
  4. import org.springframework.context.annotation.Configuration;
  5. import org.springframework.context.annotation.EnableAspectJAutoProxy;
  6. import org.springframework.validation.Validator;
  7. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  8. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  9. import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  11.  
  12. /**
  13. *<p>Title: WebConfig.java</p>
  14. *<p>Description: 配置类,用于定义DispatcherServlet上下文的bean</p>
  15. *<p>CreateDate: 2018年12月20日</p>
  16. *@author dz
  17. */
  18. @Configuration
  19. @EnableWebMvc
  20. @EnableAspectJAutoProxy
  21. @ComponentScan(basePackages = "com.dznfit.controller")
  22. public class WebConfig implements WebMvcConfigurer{
  23.  
  24. @Override
  25. public void configureViewResolvers(ViewResolverRegistry registry) {
  26. registry.jsp("/WEB-INF/view/",".jsp");
  27. }
  28.  
  29. }

这是对应spring-mvc.xml的部分
@Configuration及其下的@bean(比如注册了JSP的视图解析器的bean等springmvc常配置的bean)      

Configuration注解就是告诉Spring这个是一个配置文件类,这里配置的Bean要交给Spring去管理
@ComponentScan("com.dznfit.controller") //相当于<context:component-scan base-package="com.dznfit.controller"          

配合@Controller注册Controller的bean
@EnableWebMvc //相当于 <mvc:annotation-driven/>   启用Spring MVC支持
至此spring-mvc.xml完全被代替。

RootConfig.java

  1. package javaConfiguration;
  2.  
  3. import javaConfiguration.root.MybatisConfig;
  4. import javaConfiguration.root.ShiroConfig;
  5. import org.springframework.context.annotation.*;
  6. import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
  7.  
  8. /**
  9. *<p>Title: RootConfig.java</p>
  10. *<p>Description: 配置类,用于管理ContextLoadListener创建的上下文的bean</p>
  11. *<p>CreateDate: 2018年12月20日</p>
  12. *@author dz
  13. */
  14. @Configuration
  15. @ComponentScan(basePackages = {"com.dznfit.service"})
  16. @PropertySource("classpath:jdbc.properties")
  17. @Import({MybatisConfig.class, ShiroConfig.class})
  18. public class RootConfig {
  19. @Bean
  20. public static PropertySourcesPlaceholderConfigurer sourcesPlaceholderConfigurer() {
  21. return new PropertySourcesPlaceholderConfigurer();
  22. }
  23. }

MybatisConfig.java

  1. package javaConfiguration.root;
  2.  
  3. import com.mchange.v2.c3p0.ComboPooledDataSource;
  4. import com.mchange.v2.c3p0.DataSources;
  5. import org.mybatis.spring.SqlSessionFactoryBean;
  6. import org.mybatis.spring.annotation.MapperScan;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Value;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.context.annotation.Configuration;
  11. import org.springframework.core.env.Environment;
  12. import org.springframework.core.io.ClassPathResource;
  13. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  14. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  15. import org.springframework.transaction.annotation.EnableTransactionManagement;
  16.  
  17. import javax.sql.DataSource;
  18. import java.beans.PropertyVetoException;
  19. import java.io.IOException;
  20. /**
  21. *<p>Title: DruidDataSourceConfig.java</p>
  22. *<p>Description: 数据源属性配置</p>
  23. *<p>CreateDate: 2018年12月20日</p>
  24. *@author dz
  25. */
  26. @Configuration
  27. @MapperScan(basePackages = "com.dznfit.dao")
  28. @EnableTransactionManagement
  29. public class MybatisConfig {
  30.  
  31. @Value("${driver}")
  32. private String driver;
  33.  
  34. @Value("${url}")
  35. private String url;
  36.  
  37. @Value("${name}")
  38. private String user;
  39.  
  40. @Value("${password}")
  41. private String password;
  42.  
  43. @Autowired
  44. private Environment environment;
  45.  
  46. @Bean("dataSource")
  47. public DataSource dataSourceConfig() throws PropertyVetoException {
  48. // 使用c3p0
  49. ComboPooledDataSource source = new ComboPooledDataSource();
  50. source.setDriverClass(driver);
  51. source.setJdbcUrl(url);
  52. source.setUser(user);
  53. source.setPassword(password);
  54. return source;
  55. }
  56.  
  57. @Bean("sqlSessionFactoryBean")
  58. public SqlSessionFactoryBean sqlSessionFactoryBeanConfig() throws PropertyVetoException, IOException {
  59. SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
  60. factoryBean.setDataSource(this.dataSourceConfig());
  61. factoryBean.setTypeAliasesPackage("com.dznfit.entity");
  62. factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
  63. PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  64.  
  65. factoryBean.setMapperLocations(resolver.getResources("Mapper/*.xml"));
  66. return factoryBean;
  67. }
  68.  
  69. @Bean("transactionManager")
  70. public DataSourceTransactionManager dataSourceTransactionManagerConfig() throws PropertyVetoException {
  71. DataSourceTransactionManager manager = new DataSourceTransactionManager();
  72. manager.setDataSource(this.dataSourceConfig());
  73. return manager;
  74. }
  75. }

ShiroConfig.java

  1. package javaConfiguration.root;
  2.  
  3. import org.springframework.context.annotation.Configuration;
  4.  
  5. @Configuration
  6. public class ShiroConfig {
  7. }

这部分相当于spring-*.xml中管理的常用dao(mapper)、Service

@Configuration标记这是一个配置类
@ComponentScan配合@Repository、 @Service注册dao和Service的bean

@MapperScan("com.dznfit.service")     
@MapperScan("com.dznfit.dao")
//Mybatis mapper.class的位置相当MapperScannerConfigurer 的bean      

如果用的是mybatis的话,用@MapperScan注册mapper的bean   

为了方便管理增加灵活性把它们分开不同的类来注册,使用@Import引入

@Import({MybatisConfig.class, ShiroConfig.class})

@Configuration及其下的@bean(比如注册了DataSource和sqlSessionFactory等的bean)       

Configuration注解就是告诉Spring这个是一个配置文件类,这里配置的Bean要交给Spring去管理

@EnableTransactionManagement 相当于<tx:annotation-driven />

此文章参考:javaConfiguration

源码下载:dznf147

告辞...

SSM框架新特性关于用Java配置类完全代替XML的更多相关文章

  1. Atitit.wrmi web rmi框架新特性

    Atitit.wrmi web rmi框架新特性 1. V1d  新特性1 1.1. 增加了精确参数1 1.2. 增加了req参数,命名参数模式..1 1.3. 增加了globale  传递隐含参数r ...

  2. Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结

    Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的“不失败”机制3 3. Guard 4 4. swift的新语 ...

  3. WebService:java配置类形式发布WebService接口及遇见的问题总结

    配置WebService前需要以下依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> ...

  4. spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

  5. Servlet3.0新特性(从注解配置到websocket编程)

    Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...

  6. 【servlet3.0新特性】Annotation注解配置

    servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...

  7. 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)

    概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...

  8. 基于IDEA采用springboot+Mybatis搭建ssm框架简单demo项目的搭建配置流程

    一.通过对比可以原始SSM搭建流程,spring boot省去了大量的配置,极大提高了开发者的效率.原始SSM框架搭建流程见博客: https://www.cnblogs.com/No2-explor ...

  9. JAVA 8 新特性实用总JAVA 8 新特性实用总结结

    JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 ...

随机推荐

  1. 二级数组省市表(二维数组json)

    <一省份.城市二级联动+vue搭架> a. template部分 <section class="edit__place"> <select v-mo ...

  2. 视图查询的数据和sql查询的数据不一样

    视图查询的数据和sql查询的数据不一样. 手动刷新视图 exec sp_refreshview  视图名称

  3. JSX 到 JS 的转换

    在写react代码的时候,大部分同学应该都是写JSX.因为相比于写纯JavaScript.写JSX为我们去写组件,比写一些在JavaScript当中写类似于html结构的这种代码是要方便非常非常多的, ...

  4. app开发-1

    一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead  表头.mbody ...

  5. (转)接口测试工具Postman使用实践

    一.接口定义 软件不同部分之间的交互接口.通常就是所谓的API――应用程序编程接口,其表现的形式是源代码. —— [ 百度百科 ]我们常说的接口一般指两种:(1)API:应用程序编程接口.程序间的接口 ...

  6. 如何使用 淘宝 NPM 镜像

    淘宝 NPM 镜像 原文链接 http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同 ...

  7. python zlib模块缺失报错:RuntimeError: Compression requires the (missing) zlib module

    解决方式: # yum install zlib # yum install zlib-devel 下载成功后,进入python2.7的目录,重新执行 #make #make install 此时先前 ...

  8. 看图轻松理解数据结构与算法系列(NoSQL存储-LSM树) - 全文

    <看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的样子. 关于LSM树 ...

  9. 如何用okr做好目标规划

    有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...

  10. WinDbg常用命令系列---线程相关操作~*

    ~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...