by agate - Published: 2008-04-01 [7:44 下午] - Category: 历程, 程序编码

IOC(DI)即依赖注入,参见的就是Spring的IOC容器,实现就是实现符合java bean的规范的带有无参构造函数的带有对应set和get方法的一个java类(pojo)。前面都是废话,我们都知道注入一般就是使用set方法,对需要的成员变量进行动态的赋值指向。一般get没有什么用,所以我们用spring管理的时候一般只需写入需要注入对象的set方法即可。

但是今天开发展现层的时候……我用struts的表单自动注入的特性写了一个CRUD模块,当然我还是使用原先的逻辑:只写set方法。结果值没有正确被赋值(有的时候只有部分值被获取)。而且发现如果是简单的数值类型的参数在只设置set方法的情况下是可以被赋值的,但是要是参数是一个ValueObject这样的一个实体对象:

public class User {
	private String userName;
	private String userPwd;
	// --------other private property
	// --------setter
	// --------getter
}

那么,如果我们在action中只对user属性写了set方法

public class UserAction {
	private User user;
	// --------setter
	public String execute() {
		// --------code...
	}
}

那么经过我不下10次的不同试验,保证是无法正确赋值的!因为……还缺了个get方法。也不知道具体原因是什么(猜想在struts2的IOC中,对于复杂对象的注入可能同时用到了set和get方法),但是经验告诉的是set和get方法最好都写!

by agate - Published: 2007-12-06 [9:45 下午] - Category: 程序编码

一直以来我们总是使用new的方式来创建对象或对象层级之间的关系
ClassOne one = new ClassOneImpl();
用 UML 图示很明确的告诉我们一个引用只是一个箭头,那我们平时那种new的方式建立关系的方法让我们在以后的代码修改还是添加功能的时候会造成大量的代码修改,比如我们把上面这个 ClassOneImpl 实现更换成新的一个实现 ClassOneImpl2 那么我们就要修改所有代码中 ClassOneImpl 的部分……如果这个工程很大的话,这个可是件可怕的修改工程啊!

IOC,即 Inversion of control 中文意思为"控制反转",个人理解即为把过去在代码中 new 的方式在编译时绑定关系进而在运行时使用的对象关系方式,转化成在运行时加载的方式,即所谓的"反转"。

现在我用一个十分简单的例子实现IOC的HelloWorld
Read more...

Tags: [ , , ] - Comments: View Comments