IoC容器
- IoC(Inverse of Control):某一接口具体实现类的选择控制权从调用类移除,转交给第三方决定。
- DI(Dependency Injection):让调用类对某一接口实现类的依赖关系由第三方(容器或协作类)注入,以移除调类对某一接口实现类的依赖。
例子:Spring3.x企业应用开发实战
public class MoAttack {
public void cityGateAsk() {
LiuDeHua ldh - new LiuDeHua();
ldh.responseAsk("墨者革离!");
}
}
public class MoAtack {
public void cityGateAsk() {
GeLi geli = new LiuDeHua();
geli.responseAsk("墨者革离!");
}
}
IoC的类型:
- 构造函数注入
public class MoAtack {
private GeLi geli;
public MoAtack(GeLi geli) {
this.geli = geli;
}
public void cityGateAsk() {
geli.responseAsk("墨者革离!");
}
}
public class Director {
public void direct() {
Geli geli = new LiuDeHua();
moAttack.cityGateAsk();
}
}
- 属性注入
public class MoAtack {
private GeLi geli;
public void setGeli(GeLi geli) {
this.geli = geli;
}
public void cityGateAsk() {
geli.responseAsk("墨者革离!");
}
}
public class Director {
public void direct() {
Geli geli = new LiuDeHua();
MoAttack moAttack = new MoAttack();
moAttack.setGeli(geli);
moAttack.cityGateAsk();
}
}
- 接口注入
public interface ActorArrangable {
void injectGeli(GeLi geli);
}
public class MoAtack implements ActorArrangable {
private GeLi geli;
public void injectGeli(GeLi geli) {
this.geli = geli;
}
public void cityGateAsk() {
geli.responseAsk("墨者革离!");
}
}
public class Director {
public void direct() {
Geli geli = new LiuDeHua();
MoAttack moAttack = new MoAttack();
moAttack.injectGeli(geli);
moAttack.cityGateAsk();
}
}
- Spring容器相当如上面的
Director
,通过配置文件或注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入的工作。
Java
类装载器ClassLoader
- 装载:查找和导入Class文件;
- 链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的;
- 校验:检查载入Class文件数据的正确性;
- 准备:给类的静态变量分配存储空间;
- 解析:将符号应用转换成直接引用;
- 初始化:对类的静态变量、静态代码块执行初始化工作
反射机制
- Class反射对象描述类语义结构,可以从Class对象中获取构造函数、成员变量、方法类等元素的放射对象,并以编程的方式通过这些反射对象对目标类对象进行操作。
AOP
通过横向抽取的方式实现代码的可重用性,主要用于性能检测、事务管理和日志记录。
动态代理:允许开发者在运行期间创建接口的代理实例。