因为EJB设计器中知道一个EJB所有引用的类和接口,所以必须通过EJB设计器对EJB类进行更名。如果在编辑器或UML浏览器中对EJB文件进行重命名重构,你将看到以下的警告信息:
WARNING: You are refactoring an EJB file. This may require
that you change some source code and the deployment
descriptor by hand. We recommend using the EJB designer for
most refactoring scenarios.
如果你选择继续,则需要手工更改其他相关的文件,并同时更改部署描述文件中的相关内容,稍有不慎即会发生遗漏,所以应当尽量在EJB设计器中来重构。
假设一个A类有一个成员类(B类),B类有一个方法foo(),如果C类想通过A类调用B类的foo()方法,则必须这样:
A aObj = new A();
aObj.bObj.foo();
实际情况可能会有更多的衔接层,为了减少这种层层嵌套间接调用所造成臃肿的代码,有时我们直接通过代理使代码显得简洁。在A类中提供一个代理方法foo(){bObj.foo();},这样C类只要这样就可以访问B类的foo()方法了:
A aObj = new A();
aObj.foo();
JBuilder提供了一个代理成员类方法的方便功能,来看下面的MultiAnimal类:
MultiAnimal类
1. package myrefactor ;
2. public class MultiAnimal
3. {
4. Cat cat = new Cat() ;
5. Horse horse = new Horse() ;
6. }
打开MultiAnimal.java文件,Edit->Wizards->Delegate to Member...
·Select class:默认为当前打开的类。
·Select member:列出当前类所有的成员类,下拉框将有两个选项:cat:Cat及horse:Horse,我们选择cat:Cat。
·Available methods:Cat类、Cat类的父类及Cat类的接口的方法,展开myrefactor.Habitable接口,选择howl()方法。
·Visibility:设置代理方法的可视域类型,默认为Public,接受这个默认的值。
·Generate Javadoc for delegated methods:是否为这个代理方法产生Javadoc注释,接受默认的设置。
按OK后,JBuilder为MultiAnimal类生成一个代理方法,如下所示:
生成成员类代理方法
1. package myrefactor ;
2. public class MultiAnimal
3. {
4. Cat cat = new Cat() ;
5. Horse horse = new Horse() ;
6. /**
7. * Delegate method void howl() to cat : Cat
8. */
9. public void howl()
10. {
11. cat.howl() ;
12. }
13. }
此外,Edit->Wizards下还提供了其他若干个有用的功能,它们分别是:
·Add:内部类、值域、构造函数、方法、Javadoc、代码模板。
·Edit Fields/Properties:编辑值域/属性。
·Edit Javadoc:编辑Javadoc。
·Implement Interface:实现接口中的方法。
·Override Methods:覆盖父类的方法。
但除Delegate to Member向导外,其他的向导使用的机会很少,你大可用其他的方法来完成这些功能。