1.EJB(Enterprise Java Bean)存在的问题
- 运行环境苛刻(除了java Web运行需要的servlet引擎,还需要EJB容器)
- 代码可移植性差(其实与第一点相关,个人理解)
- 总结:EJB重量级的框架
2.什么是spring?
spring是一个轻量级的javaEE解决方案,整合众多优秀的设计模式.
- 轻量级
- 对于运行环境没有额外的要求
开源 Tomcat resion jetty(后两者都没用过 不认识)
收费 weblogic webphere - 代码移植性高
不需要实现额外的接口
- 对于运行环境没有额外的要求
- javaEE的解决方案
- 整合设计模式
- 工厂
- 代理
- 策略
- 模板
3.设计模式
- 广义概念
面向对象设计中,解决特定问题的经典代码- 狭义概念
GOF4人帮定义的23种设计模式:工厂、适配器、装饰器、门面、代理、模板。。。
4.工厂设计模式
- 什么是工厂设计模式
- 概念:通过工厂类,来创建对象
- 优点:解耦合
耦合:☞代码间的强关联关系,一方的改变会影响到另一方。
问题:不利于代码维护
简单:把接口的实现类,硬编码在程序中
UserSevice userService = new UserServiceImpl();
- 简单工厂的设计
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; } }
- 通用工厂的设计
- 存在代码的冗余
- 设计通用工厂类
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; } }
- 通用工厂的使用方式
- 首先要创建出所需要的类;
- 通过配置文件的配置告知工厂;
- 通过工厂获得类的实例化对象。
UserService userService = (UserService) BeanFactory.getBean("userService");
5.总结
Spring本质:工厂 ApplicationContext (applicationContext.xml)