初始Spring

时间:2019-10-24
本文章向大家介绍初始Spring,主要包括初始Spring使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

概述

    Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。

    Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。

    Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。

    Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。

  1、什么是Spring

       Spring是一个开源框架,最早由Rod Johnson创建。Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有在EJB才能完成的事情。但Spring不仅仅局限于服务器端开发,任何Java应用都能在简单性可测试性松耦合等方面从Spring中获取收益(面向Bean的编程)。

  2、为什么要使用Spring 

       Spring最根本的使命,简化Java开发这是一个郑重的承诺,许多框架都声称在某些方面做了优化,但Spring的目标是致力于全方位的简化Java开发。

        为了降低Java开发的复杂性,Spring采取了以下四种关键策略:

           基于POJO的轻量级和最小侵入性编程Student

           通过依赖注入面向接口编程实现松耦合

           基于切面和惯例进行声明式编程

           通过切面和模板减少样式代码

  3、企业级系统的特征

        大规模:用户数量多、数据规模大、功能众多

        性能和安全要求高

        业务复杂

        灵活应变

  4、Spring的体系结构

     

    Spring的三大核心技术:

        控制反转(IOC:Inversion of Control)

        依赖注入(DI:Dependency Injection)

        面向切面编程(AOP:Aspect Oriented Programming)

      控制反转:

             什么是IOC这么讲吧,一个系统的运作肯定不是简单的几个类就可以实现的,它 往往需要多个类的合作来实现业务逻辑。这就使得每个对象都需要与其合作的对象具有 相互的关系(依赖关系)。在早前编程中所需要的依赖对象是通过自身去创建得到的, 而现在是通过一个容器来统一管理这些依赖关系。在这整个过程中,对象获得其他对象 引用的方式其实就是IOC。

              IOC的本质:控制权的转移。IoC原理是基于面向对象中的设计原则的Don't call us,we'll call you。可以这样讲,所有组件的初始化和调用都是由容器负责。在传统实现中类之间的关系是由类自己控制的(需要使用其他类时就自己创建),但是在IoC中,组件处在容器中,由容器统一管理和调度。这就是"控制反转"的概念所在:控制权由应用代码转移到了容器中,即控制权的转移。

      依赖注入:

             依赖注入的本质:上面说到控制反转IOC,是一个思想概念,但是也要具体实现的,上面的配置文件也是一种实现方式。依赖注入提出了具体的思想。

          依赖注入DI是Dependency Injection缩写,它提出了“哪些东东的控制权被反转了,被转移了”,它也给出了答案:“依赖对象的创建获得被反转”。所谓依赖注入,就是IoC容器在运行期间,动态地将某种依赖关系注入到对象之中

       面向切面编程:

          面向切面编程的本质:面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。

                 1主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。

                 2主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

    5.Spring的例子

        1.创建Maven工程

          

          创建Maven,导入依赖 

<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.0.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.7</version>
        </dependency>

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.0</version>
        </dependency>

        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>1.2.3</version>
        </dependency>

      创建entity

      

       创建StudentIoc,TeacherIoc

public class StudentIoc {
    private Integer Stu_id;
    private String Stu_name;
    private TeacherIoc teacher;

    public void say(){
        System.out.println("大家好我的编号为:"+Stu_id+"我的姓名是:"+Stu_name+"我的导师是"+teacher.getT_name());
    }

}
public class TeacherIoc {
    private Integer t_id;
    private String t_name;

}

    创建Spring配置文件--applicationContext.xml  

      该文件位于resources(自行创建)目录下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--将Person类交给Spring容器管理(包括:实例化和给属性赋值)
        id:bean对象的唯一标识
        class:bean的全类名
        property:Person类的属性(可赋值)
    -->
  <bean id="studentIoc" class="com.wdkseft.entity.StudentIoc">
   <!--name:通过Person类中的属性名赋值-->
<property name="Stu_name" value="辨识度"></property>
<property name="Stu_id" value="16"></property>
<property name="teacher" ref="teacherIoc"></property>
  </bean>

  <bean id="teacherIoc" class="com.wdkseft.entity.TeacherIoc">
<!--name:通过Person类中的属性名赋值-->
<property name="t_id" value="16"></property>
<property name="t_name" value="温柔的电"></property>
  </bean>
</beans>

      创建测试代码

public void SpringIOC(){
        //步骤一:加载applicationContext.xml大配置文件
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //步骤二:获取bean
        StudentIoc studentIoc = (StudentIoc) ctx.getBean("studentIoc");
        studentIoc.say();
    }

     打印机案例

      

/**
 * 墨盒的接口
 */
public interface ink {
    //获取墨盒颜色
    String getInk();
}
/**
 * 彩色墨盒
 */
public class ColorInk implements ink
{
    @Override
    public String getInk() {
        return "彩色";
    }
}
/**
 * 黑白墨盒
 */
public class GrayInk implements ink {
    @Override
    public String getInk() {
        return "黑白";
    }
}
/**
 * 纸张
 */
public interface Paper {
    String getPaper();
}
/**
 * A4纸张
 */
public class A4Paper implements Paper {

    @Override
    public String getPaper() {
        return "A4";
    }
}
/**
 * B5纸张
 */
public class B5Paper implements Paper {
    @Override
    public String getPaper() {
        return "B5";
    }
}
/**
 * 打印机
 */
public class Printer {
    //纸张对象
    private Paper paper;
    private ink ink;

    //打印方法
    public void prints(){
        System.out.println("您正在使用:"+paper.getPaper()+"纸张和"+ink.getInk());
    }
}
<!--彩色盒子-->
    <bean id="colorInk" class="com.wdkseft.print.ink.ColorInk"></bean>
    <!--黑白盒子-->
    <bean id="grayInk" class="com.wdkseft.print.ink.GrayInk"></bean>
    <!--A4纸张-->
    <bean id="a4Paper" class="com.wdkseft.print.ink.paper.A4Paper"></bean>
    <!--B5纸张-->
    <bean id="b5Paper" class="com.wdkseft.print.ink.paper.B5Paper"></bean>

    <!--打印机-->
    <bean id="printer" class="com.wdkseft.print.ink.printer.Printer">
        <property name="ink" ref="colorInk"></property>
        <property name="paper" ref="a4Paper"></property>
    </bean>
@Test
    public void PrintTest(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Printer printer = (Printer) ctx.getBean("printer");
        printer.prints();
    }

原文地址:https://www.cnblogs.com/ws1149939228/p/11731852.html