• 初始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();
        }
  • 相关阅读:
    Golang——内存分区理解:代码区、数据区、堆区、栈区
    Golang基础——工程管理:同一目录和不同目录的文件引用
    Golang基础——函数,作用域,匿名函数,递归
    pandas 学习
    git学习
    Golang基础——跳转语句 break,continue,goto
    Golang基础——for循环
    Golang基础——if语句,switch语句
    while你爱不爱我
    js判断年份
  • 原文地址:https://www.cnblogs.com/ws1149939228/p/11731852.html
Copyright © 2020-2023  润新知