Geo*_*ins 5 java spring spring-boot
如果我有一组有用的可重用 Spring 组件,如何将它们作为库提供,以便其他项目可以使用这些组件中对它们有用的任何子集?
例如,我有 4 个类,X1、X2和X3,每个类都用(或,或其他)X4注释,我想将它们捆绑到一个库中。@Component@Service@Controller
然后我有一个项目 A 只对使用X1和感兴趣X3,另一个项目 B 只对使用X3和感兴趣X4。
项目 A 和 B 如何选择性地启用他们感兴趣的组件?
我正在使用 Spring Boot,所以我想我可以用 注释我的每个组件@ConditionalOnProperty,例如我可以注释X1等,如下所示:
@ConditionalOnProperty("x1.enabled")
@Component
public class X1 {
Run Code Online (Sandbox Code Playgroud)
然后下游项目x1.enabled = true如果application.properties想要使用X1.
这是做事的方式还是有其他一些标准方法来捆绑组件以供重用?
我可以想到其他方法,例如:
@ComponentScan仅扫描他们想要使用的组件的包。@Component组件类并将它们标记为抽象,然后将其留给任何下游项目,以简单地对它们想要的组件进行子类化并添加@Component到子类中。第一个想法听起来像是一个完整的黑客,第二个听起来并没有那么糟糕,但人们必须简单地创建子类才能启用某些功能(但至少它相当明确你正在做什么)。
请注意 - 我使用的是完全基于注释的配置,没有 XML。
您提出的第一个选项对我来说是一个不错的选择。您可以将类放在不同的包中,然后扫描您感兴趣的包。
但您不喜欢第一个选项,所以我建议您执行以下操作。
您可以去掉类的@component,并将其定义为配置中的bean(xml 文件或@configuration 类)。最后,每个项目配置它需要的类。
然后,您可以将这些 Bean 注入到每个项目的其他 Bean 中。
| 归档时间: |
|
| 查看次数: |
3425 次 |
| 最近记录: |