11

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

package baz.iface

interface Foo {
    void bar();
}  


package baz.whatever

@Component
class SpringyFoo implements baz.iface.Foo {
    public void bar() { frobnicate(); }
}

假设baz.whatever在 中component-scan,Spring 能够在baz.iface.Foo其他地方自动装配吗?

class FooClient {
    @Autowired
    private baz.iface.Foo;
}
4

3 回答 3

11

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

于 2013-08-19T12:51:39.830 回答
0

你不能让你的bar()“包保护”,因为它必须是public

接口主体中的每个方法声明都是隐式公共的。

Spring 的反射系统会找到您的所有类,甚至是具有默认访问权限的类,但如果您的bar()方法不是public.

于 2013-08-19T12:41:49.140 回答
0

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

于 2013-08-19T12:27:28.860 回答