Spring学习笔记(一):工厂模式

    技术2022-07-11  129

    Spring学习笔记一:工厂模式

    1.简介2.工厂模式简单工厂设计通⽤⼯⼚的设计通用工厂的使用方式

    1.简介

    1.Spring是⼀个轻量级的 JavaEE 解决⽅案,整合众多优秀的设计模式。 2.EJB(Enterprise Java Bean):重量级框架,存在问题包括:运行环境苛刻,代码移植性差。 什么是轻量级?

    对于运行环境是没用额外要求 开源 tomcat resion jetty收费 weblogic websphere 代码移植性高 不需要实现额外的接口

    JavaEE 的解决方案: 整合设计模式 ⼯⼚,代理,模板,策略

    什么是设计模式?

    ⼴义概念:⾯向对象设计中,解决特定问题的经典代码。狭义概念:GOF4⼈帮定义的23种设计模式:⼯⼚、适配器、装饰器、⻔⾯、代理、模板…】

    2.工厂模式

    概念:通过⼯⼚类,创建对象; User user = new User(); UserDAO userDAO = new UserDAOImpl(); 好处:解耦合 1.耦合:指定是代码间的强关联关系,⼀⽅的改变会影响到另⼀⽅; 问题:不利于代码维护;简单:把接⼝的实现类,硬编码在程序中;

    简单工厂设计

    package com.baizhiedu.basic; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { private static Properties env = new Properties(); static{ try { //第一步 获得IO输入流 InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties"); //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl env.load(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /* 对象的创建方式: 1. 直接调用构造方法 创建对象 UserService userService = new UserServiceImpl(); 2. 通过反射的形式 创建对象 解耦合 Class clazz = Class.forName("com.baizhiedu.basic.UserServiceImpl"); UserService userService = (UserService)clazz.newInstance(); */ public static UserService getUserService() { UserService userService = null; try { //com.baizhiedu.basic.UserServiceImpl Class clazz = Class.forName(env.getProperty("userService")); userService = (UserService) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return userService; } public static UserDAO getUserDAO(){ UserDAO userDAO = null; try { Class clazz = Class.forName(env.getProperty("userDAO")); userDAO = (UserDAO) clazz.newInstance(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return userDAO; } }

    配置文件 applicationContext.properties:

    # Properties 集合 存储 Properties文件的内容 # 特殊Map key=String value=String # Properties [userService = com.baizhiedu.xxx.UserServiceImpl] # Properties.getProperty("userService") userService = com.baizhiedu.basic.UserServiceImpl userDAO = com.baizhiedu.basic.UserDAOImpl

    通⽤⼯⼚的设计

    问题:简单⼯⼚会存在⼤量的代码冗余。 package com.baizhiedu.basic; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BeanFactory { private static Properties env = new Properties(); static{ try { //第一步 获得IO输入流 InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties"); //第二步 文件内容 封装 Properties集合中 key = userService value = com.baizhixx.UserServiceImpl env.load(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /* key 小配置文件中的key [userDAO,userService] */ public static Object getBean(String key){ Object ret = null; try { Class clazz = Class.forName(env.getProperty(key)); ret = clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } return ret; } }

    配置文件 applicationContext.properties:

    # Properties 集合 存储 Properties文件的内容 # 特殊Map key=String value=String # Properties [userService = com.baizhiedu.xxx.UserServiceImpl] # Properties.getProperty("userService") userService = com.baizhiedu.basic.UserServiceImpl userDAO = com.baizhiedu.basic.UserDAOImpl

    通用工厂的使用方式

    定义类型 (类)通过配置⽂件的配置告知⼯⼚ applicationContext.properties 中 key = value;通过⼯⼚获得类的对象 Object ret = BeanFactory.getBean(“key”);

    总结: Spring本质:⼯⼚ ApplicationContext (applicationContext.xml)

    Processed: 0.024, SQL: 9