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

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

1)工程图一张:

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

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

<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.test.commom.AppConfig</param-value>
</init-param>
<!-- use annotation replace xml configuration. @Configuration class is required. -->
<init-param>
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet> <servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

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:

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

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

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

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
"http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> <tiles-definitions> <definition name="cookie-error" template="/WEB-INF/common/error/cookie-error.jsp"></definition> <definition name="default-403" extends="intranet-template">
<put-attribute name="main-content1" value="/WEB-INF/common/error/default-403.jsp" />
<put-attribute name="title" value="Forbidden" />
</definition> <definition name="default-404" template="/WEB-INF/common/error/default-404.jsp"></definition> <definition name="default-error" extends="intranet-template">
<put-attribute name="main-content1" value="/WEB-INF/common/error/default-500.jsp" />
<put-attribute name="title" value="Server Error" />
</definition> </tiles-definitions>

(原)SpringMVC全注解不是你们那么玩的的更多相关文章

  1. SpringMVC全注解

    SpringMVC全注解不是你们那么玩的 前言:忙了段时间,忙得要死要活,累了一段时间,累得死去活来. 偶尔看到很多零注解配置SpringMVC,其实没有根本的零注解. 1)工程图一张: web.xm ...

  2. SpringMVC 全注解实现 (1) servlet3.0以上的容器支持

    一. Spring MVC入门 1.1 request的处理过程 用户每次点击浏览器界面的一个按钮,都发出一个web请求(request).一个web请求的工作就像一个快递员,负责将信息从一个地方运送 ...

  3. 【转载】springMVC表单校验+全注解

    在这篇文章中,我们将学习如何使用Spring表单标签, 表单验证使用 JSR303 的验证注解,hibernate-validators,提供了使用MessageSource和访问静态资源(如CSS, ...

  4. springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来

    自己从事java开发工作也有一年多了,自己却没有亲手搭建一个完整的框架.于是今天自己动手搭建一个,过程中遇到一些问题,倒腾了大半天终于搞定了. 现在给大家分享一下过程,自己也记录下来,以后学习参考使用 ...

  5. 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建

    概述 从0到1教你搭建spring+springMVC+hibernate整合框架,基于注解. 本教程框架为基于全注解的SpringMVC+Spring4.2+hibernate4.3,开发工具为my ...

  6. 1-3. SpringBoot基础,Java配置(全注解配置)取代xml配置

    最近突发奇想,整合一下以前一些学习笔记,分享自己这几年爬过的坑,逐步更新文章,谢谢大家的关注和支持. 这节讲一下SpringBoot的学习必须的一些基础,Java配置.其实在Spring2.0时代就已 ...

  7. Spring3+SpingMVC+Hibernate4全注解环境配置

    Spring3+SpingMVC+Hibernate4全注解环境配置 我没有使用maven,直接使用Eclipse创建动态Web项目,jar包复制在了lib下.这样做导致我马上概述的项目既依赖Ecli ...

  8. Spring RESTful + Redis全注解实现恶意登录保护机制

    好久没更博了... 最近看了个真正全注解实现的 SpringMVC 博客,感觉很不错,终于可以彻底丢弃 web.xml 了.其实这玩意也是老东西了,丢弃 web.xml,是基于 5.6年前发布的 Se ...

  9. java spring mvc 全注解

    本人苦逼学生一枚,马上就要毕业,面临找工作,实在是不想离开学校.在老师的教导下学习了spring mvc ,配置文件实在繁琐,因此网上百度学习了spring mvc 全注解方式完成spring的装配工 ...

随机推荐

  1. 永恒之蓝EternalBlue复现

    0x01 漏洞原理:http://blogs.360.cn/blog/nsa-eternalblue-smb/ 目前已知受影响的 Windows 版本包括但不限于:Windows NT,Windows ...

  2. Git-进阶-远程仓库的使用

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

  3. 【转载】#335 - Accessing a Derived Class Using a Base Class Variable

    You can use a variable whose type is a base class to reference instances of a derived class. However ...

  4. 请教Nutzwk项目,在beetl页面怎么用shiro标签呢?

    请教Nutzwk项目,在beetl页面怎么用shiro标签呢?  发布于 381天前  作者 WenTao-Love  195 次浏览  复制  上一个帖子  下一个帖子  标签: nutzwk 如题 ...

  5. UVA-147 Dollars---完全背包+打表

    题目链接: https://vjudge.net/problem/UVA-147 题目大意: 给定11种面值分别为$100, $50, $20, $10, and $5 notes and $2, $ ...

  6. Android(java)学习笔记62:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解

    1. 先看看网路上的说法: android.intent.action.MAIN 决定应用程序最先启动的 Activity android.intent.category.LAUNCHER 决定应用程 ...

  7. vuejs样式绑定

    第一种:class的对象绑定,class引用的是一个对象,这个对象的属性显示不显示由变量决定 <style> .activated{ color:red; } </style> ...

  8. MySQL 存储过程参数IN OUT INOUT区别

    MySQL 存储过程参数IN OUT INOUT对比 一.IN -- 创建测试存储过程 delimiter // create procedure p_in ( IN num int ) begin ...

  9. 大数据(1)初始hadoop

    1.hadoop模型如下: (上图为Hadoop1.x的布局) (Hadoop2.x较Hadoop1.x,多了YARN) Hadoop框架,是一个庞大的生态系统. 或者我们可以这样理解: 可以把整个体 ...

  10. vue 城市搜索组件

    1.实现大致是如下效果 2.搜索组件的页面结构 <template>    <div>     <div class="search">     ...