Spring @Component类必须公开吗?

Chr*_*lor 7 java spring

我想将组件的接口公开为接口,并且实现类将受到包保护(并且可能在其他一些包中):

package baz.iface

interface Foo {
    void bar();
}  


package baz.whatever

@Component
class SpringyFoo implements baz.iface.Foo {
    public void bar() { frobnicate(); }
}
Run Code Online (Sandbox Code Playgroud)

假设baz.whatevercomponent-scan,春天能否在baz.iface.Foo其他地方自动装配?

class FooClient {
    @Autowired
    private baz.iface.Foo;
}
Run Code Online (Sandbox Code Playgroud)

Evg*_*eev 5

不,组件不必公开。唯一的要求是它们具有无参数构造函数。

  • 您还可以在构造函数中使用参数进行构造函数注入:http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-constructor-injection (3认同)

xyz*_*xyz 1

是的,Spring 将搜索类型的对象Foo
SpringyFoo实现Foo并可以用来代替类型的对象Foo