第一章 引言
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 的解决方案
像struts2,mybatis只是提供对mvc层的某一层的解决,但是spring是对java开发的每一个层次都有解决。 -
整合设计模式
- ⼯⼚
- 代理
- 模板
- 策略
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 通⽤⼯⼚的设计
-
问题:简单⼯⼚会存在⼤量的代码冗余。
-
通⽤⼯⼚的代码
#####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)
评论区