spring4.0全注解配置的应用,以及一些我平时写项目的一些常用配置

替代Web.XML的类

通过集成webApplicationInitialize完成启动

package com.travelsky.autotest.config.spring;

import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

import com.travelsky.autotest.aop.RequestFilter;

public class WebInit implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        // Create the ‘root‘ Spring application context
        AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
        application.scan("com.travelsky.autotest.config.spring");//扫描配置文件
        // Manages the lifecycle of the root application context
        sc.addListener(new ContextLoaderListener(application));//把配置文件添加到WEB容器里面,相当于去读取了XXX.servlet.XML 文件
        //CharacterEncodingFilter
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        characterEncodingFilter.setEncoding("UTF-8");
        characterEncodingFilter.setForceEncoding(true);
        FilterRegistration filterRegistration = sc.addFilter("characterEncodingFilter", characterEncodingFilter);
        filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");//

        sc.addFilter("requestFilter", RequestFilter.class).addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/case/*");//过滤路径 添加过滤器

        AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
        ServletRegistration.Dynamic appServlet = sc.addServlet("appServlet", new DispatcherServlet(webContext));//配置dispatchservlet
        appServlet.setLoadOnStartup(1);//貌似只有1,0或者-1
        appServlet.addMapping("/"); //配置请求的匹配方式
    }

}

XXX-servlet.XML(application-servlet.xml)的一个配置替代

XXX的servlet的配置主要还是依赖于去继承WebMvcConfigerAdapter的实现

package com.travelsky.autotest.config.spring;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration//配置注解
@ComponentScan(basePackages="com.travelsky.autotest.*")
@EnableWebMvc
@EnableScheduling//启动定时器
@EnableAspectJAutoProxy(proxyTargetClass=true)//动态代理的注解启动
public class WebConfig extends WebMvcConfigurerAdapter{

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resource/**").addResourceLocations("/resource/");//配置静态文件
    }
}

bean.xml的替代

通过@configuation和@Bean

在单元测试的情况下经常适用,我这里是启动保证数据库单例的一个例子

@Configuration
public class MongoTemplateConfig {

    @Bean public MongoTemplate autoTestClient() {
        DataSource ds = new AutoTest_DefaultDB().build(new DataSource());
        Mongo mongo = null;
        try {
            mongo = new MongoClient(ds.getIp(),ds.getPort());
        } catch (UnknownHostException e) {
            throw new RuntimeException(e);
        }
        UserCredentials userCredentials = new UserCredentials(ds.getUsername(), ds.getPassword());
        return new MongoTemplate(mongo, ds.getDatabaseName(), userCredentials);
    }
    

容器启动的时候加载的一个方案

通过继承InitializingBean的方式对afterPropertySet方法的重写,我这里是在启动的时候去查询数据库然后拿到值只有通过反射对一个对静态配置文件类的属性进行赋值

package com.travelsky.autotest.config.spring;

import java.lang.reflect.Field;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.travelsky.autotest.dao.entity.Config;
import com.travelsky.autotest.dao.table.ConfigDao;
@Component
public class InitConfigration implements InitializingBean{
    final static Logger logger = LoggerFactory.getLogger("InitConfigration");
    @Autowired
    ConfigDao<Config>  dao ;
    public void init() throws ClassNotFoundException {
        Class<?> clazz = Class.forName("com.travelsky.autotest.selenium.config.BaseConst");
        for (Field f : clazz.getFields()) {
            try {
                if (f.getType().toString().equals("int")) {
                    f.set(f.getName(), Integer.valueOf(dao.query("key", f.getName()).get(0).getValue()));
                }
                if (f.getType().toString().equals("class [Ljava.lang.String;")) {
                    String temp = dao.query("key", f.getName()).get(0).getValue();
                    temp = temp.substring(1, temp.length() - 1);
                    f.set(f.getName(), temp.split(","));
                }
                if (f.getType().toString().equals("class java.lang.String")) {
                    f.set(f.getName(), dao.query("key", f.getName()).get(0).getValue());
                }
            } catch (Exception e) {
                logger.error(f.getName() + "从数据库提取报错");
            }

        }
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        init();

    }

}
时间: 2024-10-12 21:55:40

spring4.0全注解配置的应用,以及一些我平时写项目的一些常用配置的相关文章

servlet3.0全注解spring整合shiro

基本说明 基于Servlet3.0全注解配置的Spring整合Shiro 目录 配置文件 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.ap

基于Spring4的全注解实现Restful开发

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">[Author]: kwu</span> 全注解实现Spring Restful开发,restful提供了快速的交互形式,以json的为数据传递的格式. 1.Restful控制类实现 package com.hexun.restful; import org.springfr

Spring3.0MVC+MyBatis3.0+Spring3.0(全注解列子)

说明:      附件是项目截图及所需包截图      此项目在tomcat,weblogic10下测试通过 配置文件 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/

spring4.0.6最新稳定版新特性学习,注解自动扫描bean,自动注入bean(二)

Spring4.0的新特性我们在上一章已经介绍过了.包括它对jdk8的支持,Groovy Bean Definition DSL的支持,核心容器功能的改进,Web开发改进,测试框架改进等等.这张我们主要介绍spring4.0的自动扫描功能,以及对bean的过滤等特性进行学习. 好吧,废话少说,我们来看看代码吧. package com.herman.ss.test; import org.springframework.context.ApplicationContext; import org

Varnish常用配置详解

实现负载均衡 varnish所支持的调度方式有以下几种: 1.round-robin        #加权轮询,因为每个backend都有它的权重 2.random             #随机 3.dns                #基于DNS名称解析之后进行调度 例: 定义多个backend directorNAME  scheduler {     .retries = 2;     {          .backend = b1;          .weight = 2;   

spring4.06 hibernate4.31 struts2.3.16 全注解MAVEN环境搭建

最近使用目录最新版本的SPRING.HIBERNATE.STRUTS使用MAVEN搭建了一个全注解的环境.记录一下 POM文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 htt

基于restful注解(spring4.0.2整合flex+blazeds+spring-mvc)&lt;一&gt;

摘自: http://www.blogjava.net/liuguly/archive/2014/03/10/410824.html 参考官网:1.http://livedocs.adobe.com/blazeds/1/blazeds_devguide/2.http://docs.spring.io/spring-flex/docs/1.5.2.RELEASE/reference/html/1)下载blazeds(turnkey4.0.x版本)网址:http://sourceforge.net/

Spring4+MVC+Hibernate4全注解环境搭建(一)

声明: 以下任何观点.理解,都有可能是错的,那仅代表作者在某一时刻结合自己的学习经历和思考得出的观点,很明显,这样的前提下很多都可能是错的.请各位在看到任何可疑观点时,都不要轻信,如果你们在喷我的时候能把理由一并说出来,那我就非常感激了.像什么“你懂的”,“当然是!不然还能是什么.”那样的话恐怕既说服不了我,也说服不了别人. 目前为止我对这几个框架认识: 我的理解不一定对,但是我还是在此首先明确一下我为什么选择的是Spring4+MVC+Hibernate4. Spring就是用来提供一个IoC

基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录

原文 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录 首先说说 IDEA 12,由于myeclipse越来越卡,我改用idea12 了,发现其功能强悍到eclipse无法比拟,此款ide理解上下文是一等一的,不用什么jquery插件,extjs插件,都可以实现全智能的代码提示.速度什么的都比myeclipse快.而且IDEA提供了android支持struts spring hibernate 支持.下面,我讲教大家完成一个基于全注解的Spirn