45 个解决方案
#1
写接口的是因为spring的原因,只有接口可以被注入,具体怎么实现方法,spring是不管的
#2
就单单只是因为spring需要依靠接口注入啊
#3
大哥你如果是简单的玩和做一个DEMO而已的话,肯定不要这么麻烦来实现啊,SSH框架的目的本质就是为了实现解耦合,灵活性,便于维护和后期修改的。所以定义接口就是为了不同实现阿,工作中特别是大型项目就是为了后期的容易,并不是简单的现在的麻烦
#4
这个正解,我补充一句,其实在集成中实际上是可以跳过接口这一层直接注入类的,不过这要引入另外的JAR包,叫什么我忘了,在spring的标准jar中有,但是这不符合国际惯例,哈哈,也不是个好习惯,建议LZ还是按照标准的流程来
#5
好吧!
#6
晕倒,跟spring有什么关系,接口的作用就是用来解耦合的,就是让调用者不去关心具体实现,只负责调用接口方法就OK了,具体实现变了也不需要到处改调用的代码。
#7
好了,你这样一问,java的最大好处,面向接口编程被你否定了。。。。。
#8
举个列子说明一下
#9
使用,spring框架,是为什么 了日后更好的维护。同时,也减少了,程序员对底层代码的编写。能理解,这些,就差不多了。
#10
谁说spring只能注入接口
也把spring说得太烂了点吧
接口的目的在意多元多样化
实现修改的便捷,而不是为了注入
简单的说注入就是一部装配机器
你给他什么他帮你装配什么
也把spring说得太烂了点吧
接口的目的在意多元多样化
实现修改的便捷,而不是为了注入
简单的说注入就是一部装配机器
你给他什么他帮你装配什么
#11
我总结下:第一,使用接口是从架构方面考虑,面向接口编程这是我们提倡的。第二,楼上有人说只能注入接口这点事在我们使用AOP时要考虑的,比方说你的dao上加@transaction后。
#12
interface是 依赖注入的3种方法之一
#13
面向接口编程降低耦合度。。。
#14
SPring通过它自身的IoC的机制使类的创建不再直接依赖于new来创建,而所有的类都交由Spring管理,而我们只需要使用spring的类实例即bean就行,不需关心它的创建和回收,大大降低类之间的
直接依赖关系,这就是所谓解耦合。
#15
1.这是面向接口编程的方式。你需要好好看看 面向接口编程的优势!
2.在spring注入的时候 一般注入的都是接口。
2.在spring注入的时候 一般注入的都是接口。
#16
10楼++
接口就是为了解耦。。。今后的扩展与维护。。。与spring没有必然联系
至于spring 里面的配置,注入未必要接口,只要这个bean存在就行了。
但这样,spring效果就大在降低了。。。
另外接口并非只是在spring框架中才有解耦作用
详细的,网上查一下接口编程之类的信息。。。
个人见解。。。
接口就是为了解耦。。。今后的扩展与维护。。。与spring没有必然联系
至于spring 里面的配置,注入未必要接口,只要这个bean存在就行了。
但这样,spring效果就大在降低了。。。
另外接口并非只是在spring框架中才有解耦作用
详细的,网上查一下接口编程之类的信息。。。
个人见解。。。
#17
解耦~~~~~~~
#18
楼主看来只是在玩玩具 并没有接触过真正的大型项目
#19
谁告诉只能是接口才能注入啊 都是扯.
DAO要不要实现接口,跟你设计有关系
不要啥东西一来,就是贫血的entity,然后DAO接口 DAO实现,Service接口,Service中注入DAO
开发又不是教条,但很多人却奉为圣经。
DAO要不要实现接口,跟你设计有关系
不要啥东西一来,就是贫血的entity,然后DAO接口 DAO实现,Service接口,Service中注入DAO
开发又不是教条,但很多人却奉为圣经。
#20
???!!!
#21
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>
这个要这么解释!
这个难道不算是注入么!!
#22
写接口的是因为spring的原因,只有接口可以被注入
这句话有点。。。
这句话有点。。。
#23
学习了,才出江湖
#24
不是吧,所有类都可以注入。我想这应该是接口注入了是为了让所有实现类都可以注入,
#25
写接口和spring是没有任何关系的 做一个真实的项目你不可能不写接口的 一个项目要能解耦要以后维护要扩展的 你不能每次维护 扩展多去修改里面的代码吧 那你这个项目也只能就此瘫痪了 (因为你是和spring整合了 就把所有的东西交个spring去管理 这叫控制反转(IOC) )
#26
没有接手过很大的项目,目前在做云计算中心。我们单位一个人负责一个项目
#27
为了心情不好了可以换
#28
看了楼主的回答 完全费掉了。。。。。
接口是一种规范。。。为什么要这么写呢
因为多人合作的规范。。
当你定义好了接口后 至于dao怎么实现 就是每个人的事情了,接口是多人合作的规范!!!
当你项目一旦使用框架时,避免不了 多人合作的。
接口是一种规范。。。为什么要这么写呢
因为多人合作的规范。。
当你定义好了接口后 至于dao怎么实现 就是每个人的事情了,接口是多人合作的规范!!!
当你项目一旦使用框架时,避免不了 多人合作的。
#29
所以你们单独做小项目时 没感觉 其实也不需要!!!
但当大项目的时候
多个模块一并开发时 一定是先定义接口规范。。。切记!!!
但当大项目的时候
多个模块一并开发时 一定是先定义接口规范。。。切记!!!
#30
不写接口,项目怎么分层
#31
举几个例子接口好处的例子,
(1)两个人开发两个模块,一个是完成对数据库的基本操作,一个是在调用前一个人的操作实现业务,第二个人只需要提供给前一个人一个接口,具体的前一个人实现就好了,两个人互相不用管对方的代码。
(2)如果本来这个项目用的是Oracle,现在要用sql server,只需要重写一个符合接口的实现类就可以,主程序不用动
(1)两个人开发两个模块,一个是完成对数据库的基本操作,一个是在调用前一个人的操作实现业务,第二个人只需要提供给前一个人一个接口,具体的前一个人实现就好了,两个人互相不用管对方的代码。
(2)如果本来这个项目用的是Oracle,现在要用sql server,只需要重写一个符合接口的实现类就可以,主程序不用动
#32
如果,整个项目的所有内容都是自己负责,包括以后的扩展维护,那我感觉怎么写都无所谓了。自己感觉怎么方便怎么来呗
#33
深刻理解一下 依赖注入 吧!
#34
IOC有两种实现方式,正常我们常用的都是通过SET方法来依赖注入,要spring的配置文件里配置,还有一个方式用得不是很好,通过构造方法来依赖注入。
#35
这家伙其实想知道接口的好处..
搞个通俗点的例子
接口就是一个契约,约定好规则或者结果,至于你怎么搞,随便你.
就像上面生儿子的接口一样,只要一个儿子就好了,至于你怎么生,那就是你的事了.
加入哪天找不到你了,他找别人生也很简单..实现的方法改改就OK了.
搞个通俗点的例子
public interface ITest{
// 得到一个儿子
public Son getSun();
}
public class implements ITest{
public Son getSun(){
// 这里随便你搞啊,你可以找个小姐生儿子,也能找个妇女生儿子.想怎么都行,最终返回一个儿子就好了
return //搞出的儿子
}
}
接口就是一个契约,约定好规则或者结果,至于你怎么搞,随便你.
就像上面生儿子的接口一样,只要一个儿子就好了,至于你怎么生,那就是你的事了.
加入哪天找不到你了,他找别人生也很简单..实现的方法改改就OK了.
#36
。。。。。。
#37
主要是因为lz还就没体会到接口的好处,java这么受大众的欢迎,接口的设计是功不可没的
#38
当项目中用到AOP时,才必须定义成接口,而DAO层中的逻辑一般都包含事务控制,所以项目刚开始时候才会在Dao层和service层,service和Action层之间都定义接口,因为这样的话才能够对service层进行事务控制的时候不用更改已经实现的代码(当然用spring的 CGLIB也是可以的,但是这种方法是spring不推荐的),如果你要对Dao层进行事务控制的话,用spring的话最好是每层之间都依赖于接口而不是具体实现类
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样
动态代理的一个重要特征是,它是针对接口的,所以我们的dao要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨论.
大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。
我也有楼主这样的困惑,看了楼上各位的解答以及我自己在网上看的东西,总结出了上面的内容,希望能对你有所启发.
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样
动态代理的一个重要特征是,它是针对接口的,所以我们的dao要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨论.
大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。
我也有楼主这样的困惑,看了楼上各位的解答以及我自己在网上看的东西,总结出了上面的内容,希望能对你有所启发.
#39
混个脸熟
#40
哥们真NB
面向接口的编程是为了降低耦合,更加易于维护方便!如果是大型项目的话,你很快即能感受到面向接口的好处!
#41
MARking 35楼的解释碉堡了!
#42
其实没必要这么麻烦,我就是跳过接口,直接注入类的。
#43
确实也是可以
但是提供接口的话你可以用不同方法来实现这个接口
但是提供接口的话你可以用不同方法来实现这个接口
#44
使用java的动态代理,java.lang.reflect.Proxy类创建代理。要求目标对象必须要实现接口(只有这样才能创建代理),推荐动态代理,加载速度快。
配置代理时要配置接口
<property name="proxyInterfaces"> 配置接口
<list>
<value>com......dao</value>
</list>
</property>
#45
Hibernate和Spring负责管理的职责不一样。Hibernate是管理工程的数据库连接,而Spring是管理类的组织结构的。
#1
写接口的是因为spring的原因,只有接口可以被注入,具体怎么实现方法,spring是不管的
#2
就单单只是因为spring需要依靠接口注入啊
#3
大哥你如果是简单的玩和做一个DEMO而已的话,肯定不要这么麻烦来实现啊,SSH框架的目的本质就是为了实现解耦合,灵活性,便于维护和后期修改的。所以定义接口就是为了不同实现阿,工作中特别是大型项目就是为了后期的容易,并不是简单的现在的麻烦
#4
这个正解,我补充一句,其实在集成中实际上是可以跳过接口这一层直接注入类的,不过这要引入另外的JAR包,叫什么我忘了,在spring的标准jar中有,但是这不符合国际惯例,哈哈,也不是个好习惯,建议LZ还是按照标准的流程来
#5
好吧!
#6
晕倒,跟spring有什么关系,接口的作用就是用来解耦合的,就是让调用者不去关心具体实现,只负责调用接口方法就OK了,具体实现变了也不需要到处改调用的代码。
#7
好了,你这样一问,java的最大好处,面向接口编程被你否定了。。。。。
#8
举个列子说明一下
#9
使用,spring框架,是为什么 了日后更好的维护。同时,也减少了,程序员对底层代码的编写。能理解,这些,就差不多了。
#10
谁说spring只能注入接口
也把spring说得太烂了点吧
接口的目的在意多元多样化
实现修改的便捷,而不是为了注入
简单的说注入就是一部装配机器
你给他什么他帮你装配什么
也把spring说得太烂了点吧
接口的目的在意多元多样化
实现修改的便捷,而不是为了注入
简单的说注入就是一部装配机器
你给他什么他帮你装配什么
#11
我总结下:第一,使用接口是从架构方面考虑,面向接口编程这是我们提倡的。第二,楼上有人说只能注入接口这点事在我们使用AOP时要考虑的,比方说你的dao上加@transaction后。
#12
interface是 依赖注入的3种方法之一
#13
面向接口编程降低耦合度。。。
#14
SPring通过它自身的IoC的机制使类的创建不再直接依赖于new来创建,而所有的类都交由Spring管理,而我们只需要使用spring的类实例即bean就行,不需关心它的创建和回收,大大降低类之间的
直接依赖关系,这就是所谓解耦合。
#15
1.这是面向接口编程的方式。你需要好好看看 面向接口编程的优势!
2.在spring注入的时候 一般注入的都是接口。
2.在spring注入的时候 一般注入的都是接口。
#16
10楼++
接口就是为了解耦。。。今后的扩展与维护。。。与spring没有必然联系
至于spring 里面的配置,注入未必要接口,只要这个bean存在就行了。
但这样,spring效果就大在降低了。。。
另外接口并非只是在spring框架中才有解耦作用
详细的,网上查一下接口编程之类的信息。。。
个人见解。。。
接口就是为了解耦。。。今后的扩展与维护。。。与spring没有必然联系
至于spring 里面的配置,注入未必要接口,只要这个bean存在就行了。
但这样,spring效果就大在降低了。。。
另外接口并非只是在spring框架中才有解耦作用
详细的,网上查一下接口编程之类的信息。。。
个人见解。。。
#17
解耦~~~~~~~
#18
楼主看来只是在玩玩具 并没有接触过真正的大型项目
#19
谁告诉只能是接口才能注入啊 都是扯.
DAO要不要实现接口,跟你设计有关系
不要啥东西一来,就是贫血的entity,然后DAO接口 DAO实现,Service接口,Service中注入DAO
开发又不是教条,但很多人却奉为圣经。
DAO要不要实现接口,跟你设计有关系
不要啥东西一来,就是贫血的entity,然后DAO接口 DAO实现,Service接口,Service中注入DAO
开发又不是教条,但很多人却奉为圣经。
#20
???!!!
#21
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>
这个要这么解释!
这个难道不算是注入么!!
#22
写接口的是因为spring的原因,只有接口可以被注入
这句话有点。。。
这句话有点。。。
#23
学习了,才出江湖
#24
不是吧,所有类都可以注入。我想这应该是接口注入了是为了让所有实现类都可以注入,
#25
写接口和spring是没有任何关系的 做一个真实的项目你不可能不写接口的 一个项目要能解耦要以后维护要扩展的 你不能每次维护 扩展多去修改里面的代码吧 那你这个项目也只能就此瘫痪了 (因为你是和spring整合了 就把所有的东西交个spring去管理 这叫控制反转(IOC) )
#26
没有接手过很大的项目,目前在做云计算中心。我们单位一个人负责一个项目
#27
为了心情不好了可以换
#28
看了楼主的回答 完全费掉了。。。。。
接口是一种规范。。。为什么要这么写呢
因为多人合作的规范。。
当你定义好了接口后 至于dao怎么实现 就是每个人的事情了,接口是多人合作的规范!!!
当你项目一旦使用框架时,避免不了 多人合作的。
接口是一种规范。。。为什么要这么写呢
因为多人合作的规范。。
当你定义好了接口后 至于dao怎么实现 就是每个人的事情了,接口是多人合作的规范!!!
当你项目一旦使用框架时,避免不了 多人合作的。
#29
所以你们单独做小项目时 没感觉 其实也不需要!!!
但当大项目的时候
多个模块一并开发时 一定是先定义接口规范。。。切记!!!
但当大项目的时候
多个模块一并开发时 一定是先定义接口规范。。。切记!!!
#30
不写接口,项目怎么分层
#31
举几个例子接口好处的例子,
(1)两个人开发两个模块,一个是完成对数据库的基本操作,一个是在调用前一个人的操作实现业务,第二个人只需要提供给前一个人一个接口,具体的前一个人实现就好了,两个人互相不用管对方的代码。
(2)如果本来这个项目用的是Oracle,现在要用sql server,只需要重写一个符合接口的实现类就可以,主程序不用动
(1)两个人开发两个模块,一个是完成对数据库的基本操作,一个是在调用前一个人的操作实现业务,第二个人只需要提供给前一个人一个接口,具体的前一个人实现就好了,两个人互相不用管对方的代码。
(2)如果本来这个项目用的是Oracle,现在要用sql server,只需要重写一个符合接口的实现类就可以,主程序不用动
#32
如果,整个项目的所有内容都是自己负责,包括以后的扩展维护,那我感觉怎么写都无所谓了。自己感觉怎么方便怎么来呗
#33
深刻理解一下 依赖注入 吧!
#34
IOC有两种实现方式,正常我们常用的都是通过SET方法来依赖注入,要spring的配置文件里配置,还有一个方式用得不是很好,通过构造方法来依赖注入。
#35
这家伙其实想知道接口的好处..
搞个通俗点的例子
接口就是一个契约,约定好规则或者结果,至于你怎么搞,随便你.
就像上面生儿子的接口一样,只要一个儿子就好了,至于你怎么生,那就是你的事了.
加入哪天找不到你了,他找别人生也很简单..实现的方法改改就OK了.
搞个通俗点的例子
public interface ITest{
// 得到一个儿子
public Son getSun();
}
public class implements ITest{
public Son getSun(){
// 这里随便你搞啊,你可以找个小姐生儿子,也能找个妇女生儿子.想怎么都行,最终返回一个儿子就好了
return //搞出的儿子
}
}
接口就是一个契约,约定好规则或者结果,至于你怎么搞,随便你.
就像上面生儿子的接口一样,只要一个儿子就好了,至于你怎么生,那就是你的事了.
加入哪天找不到你了,他找别人生也很简单..实现的方法改改就OK了.
#36
。。。。。。
#37
主要是因为lz还就没体会到接口的好处,java这么受大众的欢迎,接口的设计是功不可没的
#38
当项目中用到AOP时,才必须定义成接口,而DAO层中的逻辑一般都包含事务控制,所以项目刚开始时候才会在Dao层和service层,service和Action层之间都定义接口,因为这样的话才能够对service层进行事务控制的时候不用更改已经实现的代码(当然用spring的 CGLIB也是可以的,但是这种方法是spring不推荐的),如果你要对Dao层进行事务控制的话,用spring的话最好是每层之间都依赖于接口而不是具体实现类
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样
动态代理的一个重要特征是,它是针对接口的,所以我们的dao要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨论.
大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。
我也有楼主这样的困惑,看了楼上各位的解答以及我自己在网上看的东西,总结出了上面的内容,希望能对你有所启发.
Spring中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样
动态代理的一个重要特征是,它是针对接口的,所以我们的dao要通过动态代理来让spring接管事务,就必须在dao前面抽象出一个接口,当然如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式,所以不做讨论.
大多数Spring用户选择声明式事务管理。这是最少影响应用代码的选择, 因而这是和非侵入性的轻量级容器的观念是一致的。
我也有楼主这样的困惑,看了楼上各位的解答以及我自己在网上看的东西,总结出了上面的内容,希望能对你有所启发.
#39
混个脸熟
#40
哥们真NB
面向接口的编程是为了降低耦合,更加易于维护方便!如果是大型项目的话,你很快即能感受到面向接口的好处!
#41
MARking 35楼的解释碉堡了!
#42
其实没必要这么麻烦,我就是跳过接口,直接注入类的。
#43
确实也是可以
但是提供接口的话你可以用不同方法来实现这个接口
但是提供接口的话你可以用不同方法来实现这个接口
#44
使用java的动态代理,java.lang.reflect.Proxy类创建代理。要求目标对象必须要实现接口(只有这样才能创建代理),推荐动态代理,加载速度快。
配置代理时要配置接口
<property name="proxyInterfaces"> 配置接口
<list>
<value>com......dao</value>
</list>
</property>
#45
Hibernate和Spring负责管理的职责不一样。Hibernate是管理工程的数据库连接,而Spring是管理类的组织结构的。