SpringMVC全注解不是你们那么玩的

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

偶尔看到很多零注解配置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,其实没有根本的零注解. 1)工程图一张: web.xml在servlet3.0里面已经被注解完全 ...

  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. Spring3+SpingMVC+Hibernate4全注解环境配置

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

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

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

  8. java spring mvc 全注解

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

  9. spring4全注解web项目demo

    记得没接触框架的时候,写demo测试时真的很爽,新建web项目,然后随便写写servlet随便调试 框架越来越多,配置记不得了,整合容易出问题,集成新东西越来越少了,不敢动了. 这是个spring4的 ...

随机推荐

  1. Android Studio 100 tips and tricks

    关于本文 本文是想总结一些Android Studio的使用技巧,对于大多数习惯了使用eclipse的人来说,可能会须要一段时间,可是假设看过以下的一些介绍,你就能体会到Android Studio的 ...

  2. Java流

    流是一组有顺序的,有起点和终点的字节集合,是对传输数据的总称或抽象.即数据在两设备间的传输称为流,流的本质是传输数据,依据传输数据特性将流抽象为各种类,方便更直观的进行数据操作. 流的分类: 数据类型 ...

  3. Spark编译与部署

    Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建   [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.S ...

  4. Linux经常使用的命令-权利管理命令-权利管理命令chmod

    指令名字:chmod 命令英语的意图:change the permissions mode of a file 凡路径命令:/bin/chmod 语法:chmod [{ugoa}{+-=}{rwx} ...

  5. Android KK台,联系人列表#集团放置A~Z之前

    更改文件ContactLocaleUtils.java两 (Path:packages/contactsprovider/src/com/android/providers/contacts) 1. ...

  6. 创建自定义的Middleware中间件

    创建自定义的Middleware中间件 阅读目录 何为Middleware中间件 使用Inline方式注册Middleware 使用Inline+ AppFunc方式注册Middleware 定义原生 ...

  7. Oracle中使用Entity Framework 6.x Code-First

    Oracle中使用Entity Framework 6.x Code-First方式开发 去年写过一篇EF的简单学习笔记,当时EF还不支持Oracle的Code-First开发模式,今天无意又看了下O ...

  8. android 环境使用smack 必须注冊的组件

    // Private Data Storage pm.addIQProvider("query", "jabber:iq:private",new Privat ...

  9. 大数据系列修炼-Scala课程04

    Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...

  10. HDU 4932 Miaomiao&#39;s Geometry(推理)

    HDU 4932 Miaomiao's Geometry pid=4932" target="_blank" style="">题目链接 题意: ...