必须Spring bean类,Spring应用程序上下文设置的对象的类,是public类,Spring是否可以创建这些对象?显然,如果您的 bean在不同的包中访问您的其他bean ,那么您的 bean必须public相互交互.我的问题是你的所有 bean类都必须是public.
由于Spring代码本身与代码所在的包不同,因此概念上Spring正在做一些应该需要public访问类的东西.另一方面,Spring使用反射来创建bean,因此它可能不需要你的类public.
除了包访问类型之外,从Java 9我们还有Java模块.如果将类放在模块中,那么这些类是否需要公开并从模块中导出?
Bar*_*art 15
不,并非所有课程都必须public.Spring可以使用你提到的反射实例化包私有类,没有任何问题.
如果一个包私有bean由IoC容器管理并由同一个包中的类使用,那就没问题了.只有当您尝试跨该包连接该bean时才会出现问题.当然这很明显.
我总是努力让我的bean实现接口,并让其他bean依赖于接口而不是实现类.要回答你的问题,这允许我的实现类具有默认的访问修饰符,这具有很好的副作用,如果它们在其他包中,其他bean不会意外访问它们.
旁注,我通常@Component在我的bean实现上使用系列注释,让Spring使用包扫描来导入它们.
例:
package com.example.service;
public interface SomeService {}
Run Code Online (Sandbox Code Playgroud)
执行:
package com.example.service.impl;
@Service
class SomeServiceImpl {}
Run Code Online (Sandbox Code Playgroud)
依赖于第一个接口的其他类:
package com.example.other.impl;
@Component
class OtherServiceImpl implements OtherService {
@Autowired
private SomeService someService;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5265 次 |
| 最近记录: |