博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原)SpringMVC全注解不是你们那么玩的
阅读量:6177 次
发布时间:2019-06-21

本文共 7089 字,大约阅读时间需要 23 分钟。

前言:忙了段时间,忙得要死要活,累了一段时间,累得死去活来。

偶尔看到很多零注解配置SpringMVC,其实没有根本的零注解。

1)工程图一张:

 

web.xml在servlet3.0里面已经被注解完全替代,但是spring里面的DispatcherServlet并没有被使用,本打算修改下源码弄成3.0的,奈何没啥时间。

 

这是一个标准的SpringMVC,重点是AppConfig与DBConfig,在Web.xml里面申明两个类的配置路径:

spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
com.test.commom.AppConfig
contextClass
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
1
spring
/

 

AppConfig:

 

@Configuration@ComponentScan(basePackageClasses = AppConfig.class)@EnableTransactionManagement //The code equals aop config or provider annotation transaction.@EnableAspectJAutoProxy@PropertySource({
"classpath:site-jdbc.properties"})public class AppConfig extends DBConfig { /** * 国际化 * @return */ @Bean @Qualifier("messageSource") public ResourceBundleMessageSource messageSource() { ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource(); bundleMessageSource.setBasename("i18n.u1wan-i18n"); bundleMessageSource.setUseCodeAsDefaultMessage(true); return bundleMessageSource; } /** * file upload * @return */ @Bean public CommonsMultipartResolver getCommonsMultipartResolver() { return new CommonsMultipartResolver(); } @Bean public SessionLocaleResolver localeResolver() { SessionLocaleResolver localeResolver = new SessionLocaleResolver(); return localeResolver; } @Bean public HessianProxyFactory loadHessianProxyFactory() { HessianProxyFactory hessianProxyFactory = new HessianProxyFactory(); return hessianProxyFactory; } /** * 定义spring MVC返回显示视图 * @return */ @Bean public TilesViewResolver viewResolver() { return new TilesViewResolver(); } @Bean public LoginInterceptor loginInterceptor() { return new LoginInterceptor(); } @Bean public SystemInterceptor systemInterceptor() { return new SystemInterceptor(); } @Bean public PermissionsInterceptor permissionsInterceptor() { return new PermissionsInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor()); registry.addInterceptor(systemInterceptor()); registry.addInterceptor(permissionsInterceptor()); } /** * 定义xml显示位置 * @return */ @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); tilesConfigurer.setDefinitions(new String[] { "classpath*:config/tiles/page-tiles.xml", "classpath*:config/tiles/common-tiles.xml" }); return tilesConfigurer; } /** * 定义Spring MVC显示 * @return */ @Bean public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); return multipartResolver; }}

 

DBConfig:

public class DBConfig extends DefaultWebConfig {        @Inject    Environment env;        /**     * 数据源     * @return     */    @Bean(destroyMethod = "close")    public DataSource dataSource() {        BasicDataSource dataSource = new BasicDataSource();        dataSource.setDriverClassName(env.getRequiredProperty("jdbc.driver.name"));        dataSource.setUrl(env.getRequiredProperty("jdbc.writedb.proxy.url"));        dataSource.setUsername(env.getRequiredProperty("jdbc.username"));        dataSource.setPassword(env.getRequiredProperty("jdbc.password"));        dataSource.setTestOnBorrow(true);        dataSource.setValidationQuery("select 1");        return dataSource;    }    @Bean    public SessionFactory sessionFactory() {        LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource())                .scanPackages(AppConfig.class.getPackage().getName());        builder.setProperty(org.hibernate.cfg.Environment.DIALECT, MySQL5Dialect.class.getName());        return builder.buildSessionFactory();    }            @Bean    public MongoDBAccess mongoDBAccess() {        MongoDBAccess mongoDBAccess = new MongoDBAccess();        mongoDBAccess.setMongoServerIpAddress(env.getRequiredProperty("mongodb.ip"));        mongoDBAccess.setCollectionName(env.getRequiredProperty("mongodb.collection"));        mongoDBAccess.setMongoServerPort(Integer.parseInt(env.getRequiredProperty("mongodb.port")));        mongoDBAccess.setDbName(env.getRequiredProperty("mongodb.db"));        mongoDBAccess.initDB();        return mongoDBAccess;    }        @Bean    public SessionLocaleResolver localeResolver() {        SessionLocaleResolver localeResolver = new SessionLocaleResolver();        return localeResolver;    }   /**    * hibernate事物    * @return    */    @Bean    public HibernateTransactionManager transactionManager() {        HibernateTransactionManager transactionManager = new HibernateTransactionManager();        transactionManager.setSessionFactory(sessionFactory());        return transactionManager;    }        /**     * ORM 映射--hibernate     * @return     */    @Bean    public HibernateAccess hibernateAccess() {        HibernateAccess hibernateAccess = new HibernateAccess();        hibernateAccess.setSessionFactory(sessionFactory());        return hibernateAccess;    }        /**     * JDBC--性能要求高场合     * @return     */    @Bean    public JDBCAccess jdbcAccess() {        JDBCAccess jDBCAccess = new JDBCAccess();        jDBCAccess.setDataSource(dataSource());        return jDBCAccess;    }        @Bean(name = "hibernateTransaction")    public HibernateTransactionManager hibernateTransactionManager() {        HibernateTransactionManager transactionManager = new HibernateTransactionManager();        transactionManager.setSessionFactory(sessionFactory());        return transactionManager;    }}

 

通过类的配置,完全替代spring的配置文件,基本上不用配置文件,个人比较喜欢no配置文件的东西。

 

举例一个Controler:

@Controllerpublic class WebsiteController {        @Inject    private WebsiteServer websiteServer;        @RequestMapping(value = "/website/test", method = RequestMethod.GET)    public String test(Map
map, WebsiteRequest request) { map.put("test", "test"); return "test_page"; } @RequestMapping(value = "/website/testbody", method = RequestMethod.GET) @ResponseBody public String testBody(Map
map) { try { websiteServer.test(); } catch (Exception e) { e.printStackTrace(); } return "test"; }}

 

在第一个方法中,会去找test_page这个配置试图,该试图对应一个页面

第二个方法,直接返回到body中。

 

在page-tiles.xml与common-tiles.xml中设置对应视图位置:

 

转载于:https://www.cnblogs.com/bfchuan/p/3820962.html

你可能感兴趣的文章
使用阿里云接口进行银行卡四要素实名认证
查看>>
聊聊excel生成图片的几种方式
查看>>
20 万网络节点背后的数据创新应用
查看>>
理论 | 朴素贝叶斯模型算法研究与实例分析
查看>>
docker安装gitlab只需要3分钟
查看>>
Android菜鸟学习js笔记 一
查看>>
Java基础之SPI机制
查看>>
使用js控制滚动条的位置
查看>>
【Tornado源码阅读笔记】tornado.web.Application
查看>>
lsyncd搭建测试
查看>>
移动web开发之像素和DPR
查看>>
nginx+tomcat+redis实现session共享
查看>>
UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)
查看>>
rsync 介绍
查看>>
做一个合格的Team Leader -- 基本概念
查看>>
leetcode 190 Reverse Bits
查看>>
阿里巴巴发布AliOS品牌 重投汽车及IoT领域
查看>>
OPENCV图像处理(二):模糊
查看>>
glassfish4系统启动脚本
查看>>
VMware 虚拟化编程(13) — VMware 虚拟机的备份方案设计
查看>>