spring 基本上只有两个功能,一个是IOC(即注入),一个是AOP(面向切面编程,是动态代理的一种实现,技术实现上用到了AspectJ这个框架)。这里主要说一下JAVA程序员在使用spring的IOC时常犯的一个错误。下面的例子是SSH环境,spring会在action中注入service,在service中注入一个dao。
public class XXXAction{
private XxxService xxxService;
public XXXService getXxxService(){
return xxxService;
}
public void setXxxService(XxxService xxxService){
this.xxxService = xxxService;
}
}
这样写一般是没有问题的,但是分析一下会发现,对xxxService的get方法是多余的,并且有可能引起错误。Action 中注入service就是spring整了一个service对象让action调用。把service注入action 的时候一般调用service对应的set方法,也可能是构造,还有别的。这里的 service对应的get方法完全没有用。如果我们使用Struts2的JSON插件,当Action中的对象由struts转换成JSON字符串返回客户端的时候,如果遇到了service的get方法,就会出现错误,但是不报错。原因应该是欲将service 也转换成JSON字符串中的一个属性而引发的错误