• 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介绍和一点点基础。关于细节的地方没有展开。我慢慢来。

  • 相关阅读:
    程序员应该看的书
    linux下grep命令详解
    apache基本配置
    shell脚本从windows下发送到linux下运行失败的问题
    nginx服务器的安装和配置基础
    linux下ps命令用法
    apache的python部署
    《我刀刻我心——关羽往事》新书发布会在京举行
    C++图书中的王者
    C++应用程序性能优化
  • 原文地址:https://www.cnblogs.com/jyroy/p/10289930.html
Copyright © 2020-2023  润新知