Spring @Component类必须公开吗?

时间:2013-08-19 12:20:44

标签: java spring

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

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;
}

3 个答案:

答案 0 :(得分:4)

不,组件不必公开。唯一的要求是他们有一个no-arg构造函数。

答案 1 :(得分:0)

,Spring会搜索Foo类型的对象 SpringyFoo实现Foo,可用于代替Foo类型的对象。

答案 2 :(得分:0)

您无法使bar()"受套餐保护"因为它必须是public

  

Every method declaration in the body of an interface is implicitly public.

Spring的反射系统会找到你的所有类,甚至是那些具有默认访问权限的类,但是bar()方法的编译时错误不是public