21
我们的应用程序需要支持多租户。每个登录的客户可能会覆盖1个或更多的bean或核心平台级别定义的bean的某些属性(公共代码/定义)。我想知道处理这个问题的最好方法是什么。覆盖子环境中父上下文中定义的bean
我们的应用程序需要支持多租户。每个登录的客户可能会覆盖1个或更多的bean或核心平台级别定义的bean的某些属性(公共代码/定义)。我想知道处理这个问题的最好方法是什么。覆盖子环境中父上下文中定义的bean
Spring允许您多次重新定义相同的bean名称,并将给定名称的最后一个bean定义处理为获胜的名称。例如,你可以有一个定义核心bean的XML文件,并将其导入到特定于客户端的XML文件中,该文件也重新定义了其中的一些bean。但是,这有点脆弱,因为没有机制来具体说“这个bean定义是一个覆盖”。
我发现最简洁的方式来处理这是使用new @Bean
-syntax introduced in Spring 3。您可以使用Java定义它们,而不是将bean定义为XML。所以你的核心bean将被定义在一个@Bean
-annotated类中,并且你的客户端配置将会继承它,并覆盖适当的bean。这允许您使用标准的java @Override
注释,明确指出给定的bean定义被覆盖。
你确定你可以在一个子ctx中重新定义一个具有相同id /名字的bean吗? – 2010-11-22 21:04:03