神奇的java反射机制
最近在开发一个小型的j2ee项目,沿用以前公司成熟的struts + spring + hibernate三层架构,只是做些修改,加一些新的业务规则进去(这也让我这个新手体验到了面向对象的可重用性的优点),在开发的过程中我无意中发现以前公司的项目中spring托管的中间层的类里面都用的是private的默认构造方法,我感到奇怪,难道具有私有的构造方法的类也能new一个对象出来?我立马在msn上请教了我的师傅--公司的前辈,回答说是用java的反射机制,于是我上网搜索了有关java反射的资料,对java的反射机制也有了些了解,但是这些毕竟都是别人说的,我自己还需亲自验证一下,于是有了下面的代码:
那我们再来看看spring在这个问题上是不是够健壮,考验下spring的动态反射到底有多强大,到底是不是“nothing is impossible”,我把正在做的那个项目的中间层的代码稍微做了修改,把spring托管的类的私有默认构造方法加了一个参数,然后保存,编译,并重起了tomcat服务器,察看后台日志stdout.log,发现抛了异常:
????????org.springframework.beans.FatalBeanException: Could not instantiate class [com.ss.watch.serv.SysService]: no default constructor found;
看来spring虽然反射运用的出神入化,但是还是有其局限性的啊,有待后续版本进一步完善,呵呵