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

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

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

1)工程图一张:

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

 

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)