SSM框架新特性关于用Java配置类完全代替XML
项目目录结构
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,
这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,
并用于构建bean定义,初始化Spring容器
- 替代web.xml
WebApplicationInitializer.java
- package javaConfiguration;
- import javaConfiguration.RootConfig;
- import javaConfiguration.WebConfig;
- import org.springframework.web.filter.CharacterEncodingFilter;
- import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
- import javax.servlet.Filter;
- import java.util.logging.Logger;
- /*
- * Spring Mvc的配置
- *createDate: 2018年12月21日
- * author: dz
- * */
- public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
- private final static Logger LOG = Logger.getLogger(String.valueOf(WebAppInitializer.class));
- @Override
- protected Class<?>[] getRootConfigClasses() {
- LOG.info("root配置类初始化");
- return new Class<?>[]{RootConfig.class};
- }
- @Override
- protected Class<?>[] getServletConfigClasses() {
- LOG.info("------web配置类初始化------");
- return new Class<?>[]{WebConfig.class};
- }
- @Override
- protected String[] getServletMappings() {
- LOG.info("------映射根路径初始化------");
- return new String[]{"/"};//请求路径映射,根路径
- }
- @Override
- protected Filter[] getServletFilters() {
- LOG.info("-----编码过滤配置-------");
- CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter("UTF-8");
- return new Filter[]{encodingFilter};
- }
- }
WebConfig.java
- package javaConfiguration;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.EnableAspectJAutoProxy;
- import org.springframework.validation.Validator;
- import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
- import org.springframework.web.servlet.config.annotation.EnableWebMvc;
- import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
- import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
- /**
- *<p>Title: WebConfig.java</p>
- *<p>Description: 配置类,用于定义DispatcherServlet上下文的bean</p>
- *<p>CreateDate: 2018年12月20日</p>
- *@author dz
- */
- @Configuration
- @EnableWebMvc
- @EnableAspectJAutoProxy
- @ComponentScan(basePackages = "com.dznfit.controller")
- public class WebConfig implements WebMvcConfigurer{
- @Override
- public void configureViewResolvers(ViewResolverRegistry registry) {
- registry.jsp("/WEB-INF/view/",".jsp");
- }
- }
这是对应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
- package javaConfiguration;
- import javaConfiguration.root.MybatisConfig;
- import javaConfiguration.root.ShiroConfig;
- import org.springframework.context.annotation.*;
- import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
- /**
- *<p>Title: RootConfig.java</p>
- *<p>Description: 配置类,用于管理ContextLoadListener创建的上下文的bean</p>
- *<p>CreateDate: 2018年12月20日</p>
- *@author dz
- */
- @Configuration
- @ComponentScan(basePackages = {"com.dznfit.service"})
- @PropertySource("classpath:jdbc.properties")
- @Import({MybatisConfig.class, ShiroConfig.class})
- public class RootConfig {
- @Bean
- public static PropertySourcesPlaceholderConfigurer sourcesPlaceholderConfigurer() {
- return new PropertySourcesPlaceholderConfigurer();
- }
- }
MybatisConfig.java
- package javaConfiguration.root;
- import com.mchange.v2.c3p0.ComboPooledDataSource;
- import com.mchange.v2.c3p0.DataSources;
- import org.mybatis.spring.SqlSessionFactoryBean;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.env.Environment;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
- import org.springframework.transaction.annotation.EnableTransactionManagement;
- import javax.sql.DataSource;
- import java.beans.PropertyVetoException;
- import java.io.IOException;
- /**
- *<p>Title: DruidDataSourceConfig.java</p>
- *<p>Description: 数据源属性配置</p>
- *<p>CreateDate: 2018年12月20日</p>
- *@author dz
- */
- @Configuration
- @MapperScan(basePackages = "com.dznfit.dao")
- @EnableTransactionManagement
- public class MybatisConfig {
- @Value("${driver}")
- private String driver;
- @Value("${url}")
- private String url;
- @Value("${name}")
- private String user;
- @Value("${password}")
- private String password;
- @Autowired
- private Environment environment;
- @Bean("dataSource")
- public DataSource dataSourceConfig() throws PropertyVetoException {
- // 使用c3p0
- ComboPooledDataSource source = new ComboPooledDataSource();
- source.setDriverClass(driver);
- source.setJdbcUrl(url);
- source.setUser(user);
- source.setPassword(password);
- return source;
- }
- @Bean("sqlSessionFactoryBean")
- public SqlSessionFactoryBean sqlSessionFactoryBeanConfig() throws PropertyVetoException, IOException {
- SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
- factoryBean.setDataSource(this.dataSourceConfig());
- factoryBean.setTypeAliasesPackage("com.dznfit.entity");
- factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
- PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- factoryBean.setMapperLocations(resolver.getResources("Mapper/*.xml"));
- return factoryBean;
- }
- @Bean("transactionManager")
- public DataSourceTransactionManager dataSourceTransactionManagerConfig() throws PropertyVetoException {
- DataSourceTransactionManager manager = new DataSourceTransactionManager();
- manager.setDataSource(this.dataSourceConfig());
- return manager;
- }
- }
ShiroConfig.java
- package javaConfiguration.root;
- import org.springframework.context.annotation.Configuration;
- @Configuration
- public class ShiroConfig {
- }
这部分相当于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的更多相关文章
- Atitit.wrmi web rmi框架新特性
Atitit.wrmi web rmi框架新特性 1. V1d 新特性1 1.1. 增加了精确参数1 1.2. 增加了req参数,命名参数模式..1 1.3. 增加了globale 传递隐含参数r ...
- Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结
Atitit.swift 的新特性 以及与java的对比 改进方向attilax 总结 1. defer关键字1 2. try!形式存在的“不失败”机制3 3. Guard 4 4. swift的新语 ...
- WebService:java配置类形式发布WebService接口及遇见的问题总结
配置WebService前需要以下依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> ...
- spring 配置 Java配置类装配bean
https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...
- Servlet3.0新特性(从注解配置到websocket编程)
Servlet3.0的出现是servlet史上最大的变革,其中的许多新特性大大的简化了web应用的开发,为广大劳苦的程序员减轻了压力,提高了web开发的效率.主要新特性有以下几个: 引入注解配置 支持 ...
- 【servlet3.0新特性】Annotation注解配置
servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理.新增的注解支持.可插性支持等等,为读者顺利向新版本过渡扫清障碍.Servlet3.0新特性概述Servlet3.0作为 ...
- 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...
- 基于IDEA采用springboot+Mybatis搭建ssm框架简单demo项目的搭建配置流程
一.通过对比可以原始SSM搭建流程,spring boot省去了大量的配置,极大提高了开发者的效率.原始SSM框架搭建流程见博客: https://www.cnblogs.com/No2-explor ...
- JAVA 8 新特性实用总JAVA 8 新特性实用总结结
JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 ...
随机推荐
- 二级数组省市表(二维数组json)
<一省份.城市二级联动+vue搭架> a. template部分 <section class="edit__place"> <select v-mo ...
- 视图查询的数据和sql查询的数据不一样
视图查询的数据和sql查询的数据不一样. 手动刷新视图 exec sp_refreshview 视图名称
- JSX 到 JS 的转换
在写react代码的时候,大部分同学应该都是写JSX.因为相比于写纯JavaScript.写JSX为我们去写组件,比写一些在JavaScript当中写类似于html结构的这种代码是要方便非常非常多的, ...
- app开发-1
一.了解HBuilder HBuilder内封装了大量的书籍,极大方便了使用 官方文档: http://dev.dcloud.net.cn/mui/ui/ 关于布局: mhead 表头.mbody ...
- (转)接口测试工具Postman使用实践
一.接口定义 软件不同部分之间的交互接口.通常就是所谓的API――应用程序编程接口,其表现的形式是源代码. —— [ 百度百科 ]我们常说的接口一般指两种:(1)API:应用程序编程接口.程序间的接口 ...
- 如何使用 淘宝 NPM 镜像
淘宝 NPM 镜像 原文链接 http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同 ...
- python zlib模块缺失报错:RuntimeError: Compression requires the (missing) zlib module
解决方式: # yum install zlib # yum install zlib-devel 下载成功后,进入python2.7的目录,重新执行 #make #make install 此时先前 ...
- 看图轻松理解数据结构与算法系列(NoSQL存储-LSM树) - 全文
<看图轻松理解数据结构和算法>,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握.本系列包括各种堆.各种队列.各种列表.各种树.各种图.各种排序等等几十篇的样子. 关于LSM树 ...
- 如何用okr做好目标规划
有朋友和我吐槽公司总是规划一个个振奋人心的目标,让大家对工作充满了热情.然而好的开头却缺少追踪反馈没有好的结尾,那些大家所渴望达成的目标随着时间的流逝便逐渐没有了音信,不再有人主动提起,团队成员迎来的 ...
- WinDbg常用命令系列---线程相关操作~*
~ (Thread Status) 波浪符(~)命令显示指定线程或当前进程中所有线程的状态. ~ Thread 参数: Thread指定要显示的线程.如果省略此参数,将显示所有线程. 环境: 模式 仅 ...