- 运行环境苛刻可以移植性差重量级框架
Spring是一个轻量级JavaEE解决方案,整合了多种设计模式
轻量级
1.对运行环境要求低,可以运行在web容器中 tomcat resion jetty
2.代码移植性好,不需要实现额外的接口
整合了设计模式
1.工厂
2.代理
3.模板
4.策略
3.工厂设计模式1.概念:通过工厂类创建对象 User user = new User(); 2.目的:解耦合 耦合:代码间的强关联关系 问题:不利于代码维护 把接口的实现类硬编码在了程序中 UserService userService = new UserServiceImpl(); => UserService userservice = new UserServiceImplNew(); 如果要改变UserService的实现类就需要修改代码,那么就需要重新编译简单工厂设计
package com.xia.basic;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
private static Properties properties = new Properties();
static {
InputStream inputStream = null;
try {
inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static UserService getUserService() {
UserService userService = null;
try {
String userServiceImpl = properties.getProperty("userService");
Class clazz = Class.forName(userServiceImpl);
userService = (UserService)clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return userService;
}
public static UserDAO getUserDAO() {
UserDAO userDAO = null;
try {
Class clazz = Class.forName(properties.getProperty("userDAO"));
userDAO = (UserDAO)clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return userDAO;
}
}
通用工厂设计
显然简单工厂中每一个实现类都需要一个方法,那么有没有什么办法可以只设计一个通用方法呢?
package com.xia.basic;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
private static Properties properties = new Properties();
static {
InputStream inputStream = null;
try {
inputStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 通用工厂方法
public static Object getBean(String beanName) {
Object object = null;
try {
Class clazz = Class.forName(properties.getProperty(beanName));
object = clazz.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return object;
}
}
总结:
Spring本质上就是一个工厂,可以用来创建对象,解耦合



