侧边栏壁纸
  • 累计撰写 101 篇文章
  • 累计创建 89 个标签
  • 累计收到 9 条评论

spring系列笔记 - 第一章 引言

bearjun
2020-11-17 / 0 评论 / 0 点赞 / 1,707 阅读 / 3,233 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2020-11-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

第一章 引言

1.EJB(Enterprise Java Bean)

EJB是的Enterprise Java Beans技术的简称, 又被称为企业Java Beans。这种技术最早是由美国计算公司研发出来的。EJB技术的诞生标志着Java Beans的运行正式从客户端领域扩展到服务器领域。在电子商务领域运用EJB技术可以简化应用系统的开发, 这是由该技术的结构和特点所决定的。

EJB存在的问题:EJB 是重量级的框架。

1.运行环境苛刻
2.代码移植性差

缺点:运行环境苛刻,代码 移植性差
总结:重量级框架

2.spring

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

  • 轻量级:运行环境没有额外的要求,代码移植性高

    1. 对于运⾏环境是没有额外要求的
    	开源 tomcat resion jetty
    	收费 weblogic websphere
    2. 代码移植性⾼
    	不需要实现额外接⼝
    
  • JavaEE 的解决方案
    20200520004505899 (1).png
    像struts2,mybatis只是提供对mvc层的某一层的解决,但是spring是对java开发的每一个层次都有解决。

  • 整合设计模式

    1. ⼯⼚
    2. 代理
    3. 模板
    4. 策略

3.设计模式

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

4.工厂模式

4.1 什么是⼯⼚设计模式?
1. 概念:通过⼯⼚类,创建对象
	User user = new User();
	UserDAO userDAO = new UserDAOImpl();
2. 好处:解耦合
	耦合定义:指定是代码间的强关联关系,⼀⽅的改变会影响到另⼀⽅
	耦合出现的问题:不利于代码维护
	简单理解:把接⼝的实现类,硬编码在程序中
	    例如:UserService userService = new UserServiceImpl();
4.2 简单工厂的设计
public class BeanFactory {
    private static Properties env = new Properties();
    
    static{
        try {
            //第一步 获得IO输入流
            InputStream inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
            //第二步 文件内容 封装 Properties集合中 key = userService value = com.bearjun.UserServiceImpl
            env.load(inputStream);

            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    
    /*
	   对象的创建方式:
	       1. 直接调用构造方法 创建对象  UserService userService = new UserServiceImpl();
	       2. 通过反射的形式 创建对象 解耦合
	       Class clazz = Class.forName("com.bearjun.basic.UserServiceImpl");
	       UserService userService = (UserService)clazz.newInstance();
     */

    public static UserService getUserService() {
        UserService userService = null;
        try {
            //com.bearjun.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;
    }

}
4.3 通⽤⼯⼚的设计
  • 问题:简单⼯⼚会存在⼤量的代码冗余。
    20200520010013463.png

  • 通⽤⼯⼚的代码

#####java代码:
package com.bearjun.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.bearjun.basic.UserServiceImpl
userDAO = com.baizhiedu.basic.UserDAOImpl

4.4 通⽤⼯⼚的使⽤⽅式
1. 定义类型 (类)
2. 通过配置⽂件的配置告知⼯⼚
	(applicationContext.properties)
	key = value
3. 通过⼯⼚获得类的对象
	Object ret = BeanFactory.getBean("key")

5.总结

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

评论区