• Spring:(一)入门基础学习


    前述

      因为前几日刚刚学完Spring的基础,因此写一篇博客整理一下相关的基础知识。

    什么是Spring?

      Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,帮助分离项目组件之间的依赖关系。,来源于 Rod Johnson 在其著作《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来。

      Spring:SE/EE开发的一站式框架。

         一站式框架:有EE开发的每一层解决方案。

          WEB层             :SpringMVC

          Service层         :Spring的Bean管理,Spring声明式事务

          DAO层              :Spring的Jdbc模板,Spring的ORM模块

    Spring框架的优点

    • 非侵入式设计:

      非侵入式指应用程序代码对框架的依赖最小化,即不需要用户代码引入框架代码的信息,从类的编写者角度来看,察觉不到框架的存在。

    • 方便解耦、简化开发:

      通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

    • 支持AOP编程:

      AOP(Aspect Oriented Programming)面向切面编程。Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

    • 支持声明式事务处理:

      只需要通过配置就可以完成对事务的管理,不需要手动编程。

    • 方便程序的测试:

      Spring对Junit4支持,可以通过注解方便的测试Spring程序。

    • 方便集成各种优秀框架:

      Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。

    • 降低Java EE API的使用难度:

      Spring对很多难用的Java EE API(如JDBC、JavaMail、远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

    Spring的框架结构

    • Data Access/Integration层(数据访问/集成)包含有JDBC、ORM、OXM、JMS和Transaction模块。
    • Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。
    • AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。
    • Core Container(核心容器):包含有Beans、Core、Context和SpEL模块。
    • Test模块支持使用JUnit和TestNG对Spring组件进行测试。

      

    Spring的框架包

      官方下载地址:https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

      选择相应的版本下载就可以了,注意:jdk1.7只能和spring4.0以下的包搭配使用,而你要是用Spring4.0以上的包就要用jdk1.8.0乃至以上的版本。

     说明

      下面对照结构图说一下每个jar包的作用

      spring4中的jar包一共有20个

      Core部分包含4个模块

    1. spring-core:依赖注入IoC与DI的最基本实现
    2. spring-beans:Bean工厂与bean的装配
    3. spring-context:spring的context上下文即IoC容器
    4. spring-expression:spring表达式语言

     

      AOP部分包含4个模块

    1. spring-aop:面向切面编程
    2. spring-aspects:集成AspectJ
    3. spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
    4. spring-instrument-tomcat:针对tomcat的instrument实现

      

      Data Access/Integration部分包含5个模块

    1. spring-jdbc:jdbc的支持
    2. spring-tx:事务控制
    3. spring-orm:对象关系映射,集成orm框架
    4. spring-oxm:对象xml映射
    5. spring-jms:java消息服务

      Web部分包含3个模块

    1. spring-web:基础web功能,如文件上传
    2. spring-webmvc:mvc实现
    3. spring-webmvc-portlet:基于portlet的mvc实现
    4. spring-websocket:为web应用提供的高效通信工具

      

      Test部分一个模块

    1. spring-test:spring测试,提供junit与mock测试功能

      

      剩下的包是

    1. spring-messaging:用于构建基于消息的应用程序
    2. spring-context-support:spring额外支持包,比如邮件服务、视图解析等

      除了Spring的包之外,在开发中还会用到一个依赖包,即

      下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi

    我的第一个 Spring 程序

    • 创建Web项目,引入核心jar包

    • 创建pojo,描述一个User,有name和id
     1 package spring_test1.pojo;
     2 
     3 /**
     4  * @author jyroy
     5  *
     6  */
     7 public class User {
     8     private String name;
     9     private int id;
    10     
    11     public String getName() {
    12         return name;
    13     }
    14     public void setName(String name) {
    15         this.name = name;
    16     }
    17     public int getId() {
    18         return id;
    19     }
    20     public void setId(int id) {
    21         this.id = id;
    22     }
    23     @Override
    24     public String toString() {
    25         return "User [name=" + name + ", id=" + id + "]";
    26     }
    27 }
    • 编写配置文件

      编写配置文件要做的就是将类交给Spring管理

      在src目录下新建Spring核心的配置文件applicationContext.xml

      这个配置文件要怎么写呢?

      首先要写的,就是XML配置文件的约束,那约束怎么写呢?只要去 spring-framework-4.3.20.RELEASEdocsspring-framework-referencehtmlxsd-configuration.html 目录下找到相关的约束复制到xml中就可以了,剩下要做的就是对于类的配置了。

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5     xsi:schemaLocation="
     6             http://www.springframework.org/schema/beans
     7              http://www.springframework.org/schema/beans/spring-beans.xsd">
     8         
     9         <!--Spring的入门的配置-->
    10         <bean name="user"  class="spring_test1.pojo.User">
    11             <property name="name" value="李东"/>
    12             <property name="id" value="1007" />
    13         </bean> 
    14         
    15 </beans>
    • 创建一个测试类

     用到了ApplicationContext,它是一种常用的Spring核心容器。提供了完整的IOC服务支持,是管理Bean的工厂,主要负责初始化各种Bean,并调用Bran生命周期的方法,还包含对国际化、资源访问、事件传播等方面的支持。

     创建ApplicationContext接口实例,通常有两种方式:

    1. 通过 ClassPathXmlApplicationContext 创建,就是下面例子中用到的方式,new ClassPathXmlApplicationContext("applicationContext.xml") 是Spring会去类路径中查找名为applicationContext.xml 的配置文件。
    2. 通过FileSystemXmlApplicationContext 创建,从指定的文件系统路径(绝对路径)中寻找指定的XMl配置文件。

     

     1 package spring_test1.test;
     2 
     3 import org.junit.Test;
     4 import org.springframework.context.ApplicationContext;
     5 import org.springframework.context.support.ClassPathXmlApplicationContext;
     6 
     7 import spring_test1.pojo.User;
     8 
     9 public class UserTest {
    10     
    11     @Test
    12     public void demo1() {
    13         //创建Spring的工厂
    14         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    15         //通过容器获取user对象
    16         User user = (User) applicationContext.getBean("user");
    17         System.out.println(user);
    18     }
    19 }
    • 结果

    IOC和DI简述

      IOC (Inversion Of Control):控制反转。这是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。

      DI (Dependency Injection):  依赖注入。将对象依赖属性(简单值,集合,对象)通过配置设值给该对象。

    说明:

      上面的例子中,便应用了IOC和DI,这里详细的说一下。

      可以看到,我们并没有进行 new 实例化,但是还是产生对象了,这就是利用了IOC容器,进行创建对象,其中 User user = (User) applicationContext.getBean("user"); 便是通过Spring容器获取的实现类对象,而不是通过 new 关键字来创建user。

      其中name和id的设置便是应用了依赖注入,通过set方法进行的基本数据类型的注入。

      

    传统方式与IOC方式对比

    传统方式

      通过new关键字来实例化,创建对象。

      Category c = new Category();

    IOC方式

      对象的生命周期由Spring来管理,而不需要通过显式的new来实现。即控制权从本来在自己手里,现在交给了Spring。

      Category c = Spring产生。


      

      这篇都是Spring介绍和一点点基础。关于细节的地方没有展开。我慢慢来。

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/jyroy/p/10289930.html
Copyright © 2020-2023  润新知