孙哥讲解spring5day 1 lq

1.EJB(Enterprise Java Bean)存在的问题

  • 运行环境苛刻(除了java Web运行需要的servlet引擎,还需要EJB容器)
  • 代码可移植性差(其实与第一点相关,个人理解)
    image
  • 总结:EJB重量级的框架

2.什么是spring?

spring是一个轻量级的javaEE解决方案,整合众多优秀的设计模式.

  • 轻量级
    1. 对于运行环境没有额外的要求
      开源 Tomcat resion jetty(后两者都没用过 不认识)
      收费 weblogic webphere
    2. 代码移植性高
      不需要实现额外的接口
  • javaEE的解决方案
    image
  • 整合设计模式
    1. 工厂
    2. 代理
    3. 策略
    4. 模板

3.设计模式

  1. 广义概念
    面向对象设计中,解决特定问题的经典代码
  2. 狭义概念
    GOF4人帮定义的23种设计模式:工厂、适配器、装饰器、门面、代理、模板。。。

4.工厂设计模式

  1. 什么是工厂设计模式
    1. 概念:通过工厂类,来创建对象
    2. 优点:解耦合
      耦合:☞代码间的强关联关系,一方的改变会影响到另一方。
      问题:不利于代码维护
      简单:把接口的实现类,硬编码在程序中
      UserSevice userService = new UserServiceImpl();
  2. 简单工厂的设计
    package com.company.spring;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    /**
     * @author lq
     * @create 2021-09-06 22:49
     * @description: spring 模拟bean依赖注入的示例代码
     */
    public class BeanFactory {
    	private static Properties properties = new Properties();
    
    	static {
    		InputStream inputStream = null;
    		try {
    			//获得输入流
    			inputStream = BeanFactory.class.getResourceAsStream("/application.properties");
    			//将文件内容 封装到 Properties 集合中,(key-value的形式,类似与map)
    			properties.load(inputStream);
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (inputStream != null) {
    				try {
    					inputStream.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    					System.out.println("输入流关闭异常!");
    				}
    			}
    		}
    	}
    
    	public static UserService getUserService() {
    		UserService userService = null;
    		try {
    			Class clazz = Class.forName(properties.getProperty("userService"));
    			userService= (UserService) clazz.newInstance();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		} catch (IllegalAccessException e) {
    			e.printStackTrace();
    		} catch (InstantiationException e) {
    			e.printStackTrace();
    		}
    		return userService;
    	}
    }
    
  3. 通用工厂的设计
    • 存在代码的冗余

    image

    • 设计通用工厂类
    public class BeanFactory{
    	public static Object getBean(String key) {
    		Object object = null;
    		try {
    			Class<?> clazz = Class.forName(properties.getProperty(key));
    			object = clazz.newInstance();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return object;
    	}
    }
    
  4. 通用工厂的使用方式
    1. 首先要创建出所需要的类;
    2. 通过配置文件的配置告知工厂;
    3. 通过工厂获得类的实例化对象。
      UserService userService = (UserService) BeanFactory.getBean("userService");

5.总结

Spring本质:工厂 ApplicationContext (applicationContext.xml)

原文地址:https://www.cnblogs.com/rbwbear/p/15235722.html