在实际应用中,我采用的是ss2h框架开发。由于思维定势,每个dao的实现都必须实现接口。但是我不知道这样做有什么必要。我觉得每个dao先定义一个接口然后再实现并没有太大的意义。能不能详细的和我解释一下接口在此框架中是怎么起到解耦作用的。
解决方案 »
- 一个简单的El表达式问题
- springsecurity如何连接Sql server2000数据库
- Struts2中接收页面参数为空的问题
- struts2 在一个jsp页面调用多个action请教
- struts2.0的日期控件不显示是什么原因?
- 怎样在 struts-config.xml 中的 给forward 标签的 path 属性传递动态参数
- ejb怎么实现两台机子之间的调用 请教高手!
- 应用对象关联出现的问题!!!
- 一个hibernate 实例运行,为什么老是报NullPointerException?
- cmp中的DataSource的数据库驱动方式是不是必须是XA的
- struts中的间接传值。
- 刚刚搭建了个SSH2框架整合,但出来点问题...请各位高手给解决一下!!
也把spring说得太烂了点吧
接口的目的在意多元多样化
实现修改的便捷,而不是为了注入
简单的说注入就是一部装配机器
你给他什么他帮你装配什么
2.在spring注入的时候 一般注入的都是接口。
接口就是为了解耦今后的扩展与维护与spring没有必然联系
至于spring 里面的配置,注入未必要接口,只要这个bean存在就行了。
但这样,spring效果就大在降低了
另外接口并非只是在spring框架中才有解耦作用
详细的,网上查一下接口编程之类的信息
个人见解
public class NormalClass {
private String name;
private int age;
private long year; @ConstructorProperties({ "name", "age" })
public NormalClass(String name, int age) {
this.name = name;
this.age = age;
} @ConstructorProperties({ "year" })
public NormalClass(long year) {
this.year = year;
} private List<String> lists; public List<String> getLists() {
return lists;
} public void setLists(List<String> lists) {
this.lists = lists;
} public String getName() {
return name;
} public int getAge() {
return this.age;
} public long getYear() {
return year;
} public void setYear(long year) {
this.year = year;
}}
<bean id='configTest' name="configTest3,configTest2" class="study.spring.beans.NormalClass"
p:year='2011'>
<constructor-arg name="name" value="normalstring" />
<constructor-arg index="1" value="38" />
<property name="lists">
<list>
<value>abc</value>
<value>efg</value>
</list>
</property>
</bean>
这个要这么解释!这个难道不算是注入么!!
这句话有点
当你项目一旦使用框架时,避免不了 多人合作的。
(1)两个人开发两个模块,一个是完成对数据库的基本操作,一个是在调用前一个人的操作实现业务,第二个人只需要提供给前一个人一个接口,具体的前一个人实现就好了,两个人互相不用管对方的代码。
(2)如果本来这个项目用的是Oracle,现在要用sql server,只需要重写一个符合接口的实现类就可以,主程序不用动
搞个通俗点的例子
public interface ITest{
// 得到一个儿子
public Son getSun();
}public class implements ITest{
public Son getSun(){
// 这里随便你搞啊,你可以找个小姐生儿子,也能找个妇女生儿子.想怎么都行,最终返回一个儿子就好了
return //搞出的儿子
}
}
接口就是一个契约,约定好规则或者结果,至于你怎么搞,随便你.
就像上面生儿子的接口一样,只要一个儿子就好了,至于你怎么生,那就是你的事了.
加入哪天找不到你了,他找别人生也很简单..实现的方法改改就OK了.
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样
动态代理的一个重要特征是,它是针对接口的,所以我们的dao要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨论.大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。
我也有楼主这样的困惑,看了楼上各位的解答以及我自己在网上看的东西,总结出了上面的内容,希望能对你有所启发.
使用java的动态代理,java.lang.reflect.Proxy类创建代理。要求目标对象必须要实现接口(只有这样才能创建代理),推荐动态代理,加载速度快。
配置代理时要配置接口
<property name="proxyInterfaces"> 配置接口
<list>
<value>com......dao</value>
</list>
</property>