看到网上只要一问到Spring 有哪几种注入方式,基本上回答都有一个接口注入请问接口注入是什么,怎么实现,我在网上找很多发现他们说的接口注入无非就一个Setter注入方式有哪位能列一下

解决方案 »

  1.   

    接口注入和setter注入是不同的。如一楼所说,setter方法的参数是接口类型。但是接口注入的缺点非常明显,为了让容器能够注入依赖,所有组件都必须实现特定的接口。因为这个歌接口是特定于容器的,所以组件对容器产生了以来,并且一旦脱离开该容器,组件将不能重用。
      

  2.   

    这是我在网上找的一段代码,如果有人说这算接口注入,那我就无语了,接口注入在Spring这本书上就没有提到过
    [code=Jav]
    package com.springpractise;//定义一个接口GreetingServicepublic interface GreetingService {     public void SayGreeting();}package com.springpractise;public class GreetingServiceImp implements GreetingService{    private String greeting;    public GreetingServiceImp(){}    public GreetingServiceImp(String greeting){    this.greeting=greeting;    }    public void SayGreeting(){    System.out.println(greeting);    }    public void setGreeting(String greeting){    this.greeting=greeting;    }}[/code]
    xml配置如下:
    [code=XM]
    <?xml version=“1.0″ encoding=“UTF-8″?><!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN”“http://www.springframework.org/dtd/spring-beans.dtd”><beans>       <bean id=“GreetingService” <!—接口名–> class=“com.springprcatise.GreetingServiceImp”><!—类名GreetingServiceImp类–>    <property name=“greeting”> <!– 该属性名对应GreetingServiceImp类的属性(名称一致) –>       <value> hello, cuiyun</value><!– 该属性值将被绑定到GreetingServiceImp类的对应属性(greeting)上 –>    </property>    </bean></beans>
    这也能算接口注入?? 
    [/code]
      

  3.   

    如果有个类,有个带GreetingService参数的setter。然后你把<bean id=“GreetingService” <!—接口名–> class=“com.springprcatise.GreetingServiceImp”>这个注入了就算了
      

  4.   


    你的意思是说在 GreetingServiceImp 这个类里再加一行下面的:
    [code=Jav]
    private GreetingService greetingService;
    public void  setGreetingService (GreetingService greetingService){
        this.greetingService = greetingService;
    }
    [/code]
    你说的是这个?
      

  5.   

    。。请仔细参阅spring教程的ioc部分。
      

  6.   


    我身边就有Spring in Action 第二版,没有看到有接口注入这回事儿你能列一下吗?
      

  7.   

    我上面列出的就是在网上找的所谓的接口注入(就算不是,也都类似这样)
    我比较郁闷是,为什么大家一直在说“Spring 注入方式有三种:接口注入 ……”
    哪里有接口注入,网上的那些接口注入不就是 Setter 方法么?肯定是以讹传讹了所以我今天就发这样一个帖子,搞明白到底有没有接口注入,有的话是怎么样的
      

  8.   

    接口注入应该是指利用接口匹配的方式进行注入吧, 比如:你另有一个bean引用了GreetingService这个接口, 不需要指明实现GreetingServiceImpl, 容器会自己找到它的实现注入Bean, 我认为是这个意思, 不过肯定只能有一个实现,如果有多个实现就要自己指定了.不写配置文件,直接用注解时会出现的情况..
      

  9.   

    你写的这个是setter注入,刚才我也翻了一下那本书,的确没讲接口注入。
    我写个接口注入的例子你看一下
    [code=Jav]
    //接口
    public interface Injectable{
    public void inject(Object obj);
    }//实现类
    public class Injection implements Injectable{
    public Injection(){}
    public void inject(Object obj){
    System.out.println(obj instanceof Injection);
    }//测试类
    public class InjectionTest{
    public static Injection injection = new Injection;
    public static A a = new A(); //A为另一个不相干的简单类,定义我省略了。
    @Test
    public void test(){
    injection.inject(a);
    }
    [/code]
    其中injection.inject(injection)里的参数值是通过容器注入进去的,所以如果用接口注入的话,实现类必须实现这个接口,并且如果接口太多的话,注入就会特别麻烦。
    之前你写的那个setter注入,是把接口注入进去,而不是把具体的接口里的参数注入。不知道这样你懂了没?
      

  10.   

    [code=Jav]//我晕,这个java编辑器怎么不好使了?[/code]
      

  11.   

    呵呵,不是太懂,我感觉太和Setter方法注入是一样的,无非多拐一个弯儿而已
    从代码上看啊,是可以完全不要这个接口的,要了还麻烦假设我们把那个接口去掉,还有把 Injection  类的implements 去掉,这个程序照样能走通
    我感觉还是和Setter方法是一样的
    我看了一下Spring官方2.5.6 的文档,里面根本就没有提到有接口注入这回事儿,倒是说注入的方法有四种:
    Setter(设置器)、构造方法、方法注入(使用factory_bean 或 factory_method)注入、注释注入
      

  12.   

    恩。所以就说接口注入没用嘛,不过setter至少方法是set开头的,嘿嘿。顺便结下帖吧。
      

  13.   

    其实我觉得区别还是蛮大的。接口注入,注入的是接口里的内容。而setter注入,注入的是整个实现类。
      

  14.   

    接口注入就是,你实现了spring指定的一个接口,然后他把你要的系统信息传给你,比如context一个例子就是:public class ContextUtil implements BeanFactoryAware { static private BeanFactory context;

    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
    this.context = beanFactory;
    } static public BeanFactory getContext() {
    return context;
    }

    static public Object getBean(String beanName) {
    return context.getBean(beanName);
    }
    }
    其中BeanFactoryAware 是spring定义的接口,你实现了它,它在启动时,就会自动给你传context其实个人觉得接口注入不能算是注入的一种方式,因为spring也可以做成抽象类,或者父类来实现此注入方式,那是不是又有抽象类注入,父类注入方式了,还有现在的标注不是也可以实现这样和容器绑定的注入方式,比如spring-jdbc就是用了抽象类注入方式给 JdbcDaoSupport注入 JdbcTemplate,倒是可以把这些归为方法注入,倒也说的过去
      

  15.   

    我也有这个疑问 哪都没有接口注入的实例 网上全是互相copy的 哎
      

  16.   

    NND,求真理,越说我越糊涂了!
      

  17.   

    注入接口,不叫接口注入。spring默认的是注入接口,就是类要实现接口。
    比如:
    @Component("userService")
    public class UserService implements Service。
    1,如下是注入实现,这样的话要加入cglib.jar。
    UserService service = (UserService)context.getBean("userService");
    2,注入接口。
    Service serive = (Serive)context.getBean("UserService");
    我的环境:spring3.1.3。