今天看了ssh框架
在当时不太理解一个点是dao,daolmpl,server,serverlmpl,action这几个之间的关系。
总结:dao和server都是接口,daolmpl和serverlmpl分别是前两个接口的实现类,action类是属于mvc结构中的跳转控制部分。
页面有请求,请求发送到配置文件中然后配置文件会去找对应的action中的方法(先对传进来数据分析,然后找到可以承载这个数据的对应的类,并实例化出对象,当然这都是框架自动进行的),在方法中会调用server接口,使用的是serverlmpl中的实现方法,在serverlmpl中会有调用dao接口,使用的是daolmpl中的实现方法。
让我不理解的是在serverlmpl中首先声明了一个dao接口的引用,之后直接使用了daolmpl里面的实现方法,如果这时候一个接口有不同的实现类,如何确定用的是哪个实现类的方法呢
最后终于知道了在serverlmpl中只是声明一个接口的好处了,就是如果只有一个实现类那可以直接调用方法,如果接口有多个实现类,那么如果在serverlmpl中想要在他的实现方法中调用dao中的不同方法,只需要在方法中实例化dao的实现类,然后进行调用。
package college;
public class Test1 {
A a;
public static void main(String[] args) {
new Test1().test1();
}
public void test1() {
// 此时想用接口A的实现类B中的方法A1
// 只需要控制a的指向就ok
a = new B();
System.out.println(a.A1());
a = new C();
System.out.println(a.A1());
}
}
//接口A
interface A {
public String A1();
public void A2();
public void A3();
}
//实现类B
class B implements A {
public String A1() {
return "第一种实现";
};
public void A2() {
};
public void A3() {
};
}
//实现类C
class C implements A {
public String A1() {
return "第二种实现";
}
public void A2() {
};
public void A3() {
};
}
所以说。。不要轻易怀疑干了这么多年的人这么写有用吗,先知道为什么这么写。
ps:最后你也不要忘了我。责任是成熟的标志,成熟代表要学会掩饰自己的情绪,装成熟好累,我好想你。