Spring简单介绍

官网:spring.io

1,spring是一个开源框架。

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

    //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,开闭原则:对修改关闭,对扩展开发

 

 

 

 

 

例子:

//创建一个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);
    }
}

  




Tags: