反射
public class User {
public void add() {};
}
// 调用方法
User user = new User();
user.add()
// 缺点耦合度太高。当类名、方法名发生改变需要修改多处
------------------------------------------------------------
// 使用工厂模式解耦合
public class UserService {
public void add() {}
}
public class Factory {
// 提供返回UserService对象的方法
public static UserService getService() {
return new UserService();
}
}
public class UserServlet {
UserService s = Factory.getService();
s.add();
}
// 问题:servlet 和 工厂出现了新的耦合
------------------------------------------------------------
// IOC 原理
public class UserService {
public void add() {}
}
// 1. 创建配置文件
<bean id = "userService" class = "xx.xxx.UserService"/>
// 2. 创建工厂类 解析xml + 反射
public class UserFactory {
// 返回 UserService 对象的方法
public static UserService getService() {
// 解析xml文件
String classValue = ""; // 使用dom4j得到
// 反射创建类对象
Class clazz = Class.forName(classValue);
// 创建类对象
Userservice service = clazz.newInstance();
return service;
}
}
// 调用方法得到userService
public class UserServlet {
UserService userService = UserFactoryu.getService();
}
配置文件位置和名字不固定
建议放在 src 下,官方建议名称applicationContext.xml
配置对象创建
原文:https://www.cnblogs.com/qq188380780/p/11443830.html