Spring4.0实用教程-4.x初体验

jopen 10年前

一、环境准备

1、配置Spring Maven仓库。

发布版:

    <repositories>            <repository>                <id>io.spring.repo.maven.release</id>                <url>http://repo.spring.io/release/</url>                <snapshots><enabled>false</enabled></snapshots>            </repository>        </repositories>  
</div>
    </div> 里程碑版:
        <repositories>            <repository>                <id>io.spring.repo.maven.milestone</id>                <url>http://repo.spring.io/milestone/</url>                <snapshots><enabled>false</enabled></snapshots>            </repository>        </repositories>  
    </div>
      </div> 快照版:
          <repositories>            <repository>                <id>io.spring.repo.maven.snapshot</id>                <url>http://repo.spring.io/snapshot/</url>                <snapshots><enabled>true</enabled></snapshots>            </repository>        </repositories>  
      </div>
        </div>

        2、日志系统的切换。

        默认情况下Spring框架采用Jakarta Commons Logging API(JCL)作为日志系统,相应的jar包为commons-logging.jar。commons-logging在运行时会自动寻找系统类路径下已注册的日志框架,并使用它认为正确的一个来处理日志输出。如果没有可使用的,则会使用JDK的java.util.logging。为了避免 Spring框架对日志系统的依赖,只有spring-core明确地依赖commongs-logging,其他模块只在编译时依赖。如果想将 Spring框架的日志系统切换为其他的,比如SLF4J(编译时绑定),则可以将对commons-logging的依赖去掉,因为只有spring- core显式依赖它,然后再引入其他的日志系统。

        使用SLF4J:

            <dependencies>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-core</artifactId>                <version>4.0.2.RELEASE</version>            <!--排除commons-logging依赖-->                <exclusions>                    <exclusion>                        <groupId>commons-logging</groupId>                        <artifactId>commons-logging</artifactId>                    </exclusion>                </exclusions>            </dependency>            <!--添加SLF4J-JCL依赖,将对JCL的日志API调用转换为对SLF4J接口的调用-->            <dependency>                <groupId>org.slf4j</groupId>                <artifactId>jcl-over-slf4j</artifactId>                <version>1.5.8</version>            </dependency>            <!--添加SLF4J接口依赖-->            <dependency>                <groupId>org.slf4j</groupId>                <artifactId>slf4j-api</artifactId>                <version>1.5.8</version>            </dependency>            <!--添加SLF4J-Log4j依赖,用于将对SLF4J接口的调用转接到具体的日志系统log4j-->            <dependency>                <groupId>org.slf4j</groupId>                <artifactId>slf4j-log4j12</artifactId>                <version>1.5.8</version>            </dependency>            <!--添加log4j依赖,真正实现日志输出-->            <dependency>                <groupId>log4j</groupId>                <artifactId>log4j</artifactId>                <version>1.2.14</version>            </dependency>        </dependencies>  
        </div>
          </div>

          使用Log4J(JCL会在运行时发现该框架并使用它作为日志输出):

              <dependencies>            <dependency>                <groupId>org.springframework</groupId>                <artifactId>spring-core</artifactId>                <version>4.0.2.RELEASE</version>            </dependency>            <dependency>                <groupId>log4j</groupId>                <artifactId>log4j</artifactId>                <version>1.2.14</version>            </dependency>        </dependencies>  
          </div>
            </div> 二、Spring Framework 4.x的新特性

            1、提供更丰富的入门经验。原来的Spring框架网站升级为spring.io,提供了丰富的文档和入门指导。

            2、删除过时的包和方法。具体API变动可以参考变动报告,第三方类库至少使用2010/2011年发布的版本,尤其是Hibernate 3.6+, EhCache 2.1+, Quartz 1.8+, Groovy 1.8+, and Joda-Time 2.0+。Hibernate Validator要求使用4.3+,Jackson 2.0+。

            3、Java 8支持。当然也支持Java6和Java7,但最好在使用Spring框架3.X或4.X时,将JDK升级到Java7,因为有些版本至少需要Java7。

            4、Java EE 6和7。使用Spring4.x时Java EE版本至少要6或以上,且需要JPA 2.0和Servlet 3.0 的支持,所以服务器,web容器需要做相应的升级。一个更具前瞻性的注意是,Spring4.0支持J2EE 7的适用级规范,比如JMS 2.0, JTA 1.2, JPA 2.1, Bean Validation 1.1和JSR-236并发工具包,在选择这些jar包时需要注意版本。

            5、使用Groovy DSL定义外部Bean

            6、核心容器提升

            I、支持Bean的泛型注入,比如:

             
                @Autowired Repository<Customer> customerRepository.//使用特定的实现注入Repository  

            II、使用元注解开发暴露指定内部属性的自定义注解。

            III、通过@Ordered注解或Ordered接口对注入集合或数组的Bean进行排序。

            IV、@Lazy注解可以用在注入点或@Bean定义上。

            V、为开发者引入@Description注解。

            VI、引入@Conditional注解进行有条件的Bean过滤。

            VII、基于CGLIB的代理类不需要提供默认构造器,因为Spring框架将CGLIB整合到内部了。

            VIII、框架支持时区管理,比如LocalContext。

            7、Web提升

            I、增加新的@RestController注解,这样就不需要在每个@RequestMapping方法中添加@ResponseBody注解。

            II、添加AsyncRestTemplate,在开发REST客户端时允许非阻塞异步支持。

            III、为Spring MVC应用程序开发提供全面的时区支持。

            8、WebSocket,SockJS和STOMP消息

            9、测试提升

            I、spring-test模块里的几乎所有注解都能被用做元注解去创建自定义注解,来减少跨测试集时的重复配置。
            II、活跃的bean定义配置文件可以编程方式解析。
            III、spring-core模块里引入一个新的SocketUtils类,用于扫描本地可使用的TCP和UDP服务端口。一般用于测试需要socket的情况,比如测试开启内存SMTP服务,FTP服务,Servlet容器等。
            IV、由于Spring4.0的原因,org.springframework.mock.web包现在基于Servlet 3.0 API。

            注:SpringFramework4.0实用教程,通过实例讲解Spring4.X的各种配置和特性。

            </div>
            来自:http://blog.csdn.net/qbg19881206/article/details/19705681