qiuxuhui

导航

Spring简单介绍

官网:spring.io

1,spring是一个开源框架。

  1,包下载:https://repo.spring.io/release/org/springframework/spring/

    https://mvnrepository.com/artifact/org.slf4j/slf4j-api/2.0.0-alpha1

  2,导包:commons-logging-1.2.jar

      spring-beans-5.3.2.jar

      spring-context-5.3.2.jar

      spring-core-5.3.2.jar

      spring-expression-5.3.2.jar

      spring-test-5.3.2.jar

2,spring是分层的JavaEE,一站式轻量级框架。

  分层的javaEE:

    持久层:--jdbc(性能)、Mybatis()

    视图层:--jsp/servlet

    控制层:--servlet

  一站式:JavaEE 每层都有解决方案

  轻量级:spring无侵入式(低耦合,高内聚)

3,spring版本:

  1,GA 稳定版

  2,SNAPSHOT 快照版,可以稳定使用,且仍在继续改进

  3,RELEASE 预览版,内侧版本

4,spring核心:

  1,ioc & di

    IOC控制反转 Inverse object control

      1,控制什么?new对象的权利

        1,项目,程序中都是程序员 new对象

          (以前我们要自己new对象,现在spring帮我们new对象,以后我们需要对象,就找spring要)

          以前:做鞋子手工做,效率低,每个细节都要关注

          现在:工厂做,效率高,不需要关注每个细节

      2,谁控制谁?

        1,程序控制 new对象

      3,反转什么?

        1,程序员 new对象的权利反转给spring

  2,aop

  3,事物管理器

  4,spring mvc&webFlux --最新的 mvc框架

5,spring中为什么叫bean工厂而不叫对象工厂?

  1,对象----new类出来就是对象(女朋友,说换就换)

  2,bean---具有生命周期的对象(媳妇,不能说换就换)

6,spring bean工厂

  1,不适用bean工厂模式

    面向对象的六大原则:开闭原则 系统/程序对修改关闭,对扩展开放

  2,自己实现工厂----GOF23设计模式(单列模式,工厂模式)

    1,自己阅读工厂模式材料学习

    2,开闭原则:对修改关闭,对扩展开发

        1、简单工厂    1)不符合开闭原则 (反射)   2)要编写很多个工厂类 

         2、工厂方法模式

         3、抽象工厂

 

    3,spring bean工厂 (本质ioc容器)
        你想让bean工厂帮你new对象,首先要告诉spring bean工厂需要产生什么对象? 

    1)导包
      https://repo.spring.io/release/org/springframework/spring/

      spring-beans-5.0.14.RELEASE.jar 支持bean工厂的包
      spring-context-5.0.14.RELEASE.jar 支持context的包
      spring-core-5.0.14.RELEASE.jar 支持spring的核心类的包
      spring-expression-5.0.14.RELEASE.jar 支持spring表达式的包
      spring-test-5.0.14.RELEASE.jar 支持spring单元测试

 

    2)通过配置告诉spring bean工厂生产什么样的bean?
      https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#spring-core
      方式1:基于xml配置 (今天)
        1)BeanFacotry 按需实例化
        2) ApplicationContext 容器启动实例化所有的bean
        ClassPathXmlApplicationContext
        FileSystemXmlApplicationContext
      注意:classpath:spring-beans.xml

      WebApplicationContext 集成 mvc框架

例子:

//创建一个BlackPig类 继承Pig父类
public class BlackPig extends Pig{ private int age; private String name; public BlackPig() { System.out.println("调用了BlackPig的构造方法"); } public BlackPig(int age, String name) { super(); this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "BlackPig [age=" + age + ", name=" + name + "]"; } }

  

//创建一个pig类
public class Pig {

}

  

//创建一个工厂
/*
 * 对象工厂还不能说是bean工厂
 * 
 * 
 */
public class ObjectFactory<T> {
    //不够优雅
//    public RedPig createRedpig() {
//        return new RedPig();
//    }
//    public BlackPig createBlackPig() {
//        return new BlackPig();
//    }
    
    
    /**
     * 稍微修改 多态:父引用指向任何子类对象
     * Pig p1 = new RedPig();
     * 
     * Pig p2 = new BlackPig();
     */
    
//    public Pig createPig(String type) {
//        if(type.equals("red")) {
//            return new RedPig();
//        }else if(type.equals("black")) {
//            return new BlackPig();
//        }else if(type.equals("blue")) {
//            return new BluePig();
//        }else if(type.equals("green")) {
//            return new GreenPig();
//        }else {
//            return null;
//        }
//    }
    //优雅的玩法 符合开闭原则的玩法 spring玩法
    public T createPig(Class clazz) {
        try {
            return (T) clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    
}

  

//测试
public class Test {
    public static void main(String[] args) {
        //1.通过猪对象工厂获取黑猪或红猪对象
        ObjectFactory<Pig> factory = new ObjectFactory<Pig>();
        //获取黑猪
        Pig blackPig =factory.createPig(BlackPig.class);// (BlackPig) factory.createPig("black");//factory.createBlackPig();
        
        //获取狗,一样需要dog父类,和dog类
        ObjectFactory<Dog>  factory2 = new ObjectFactory<Dog>();
        Dog createPig = factory2.createPig(RedDog.class);
    }
}

  




posted on 2020-12-15 08:44  qiuxuhui  阅读(254)  评论(0编辑  收藏  举报