我需要将旧的Spring项目迁移到Sping Boot 。假设下面的代码片段我必须迁移到Sping Boot 风格。
这里我问一下,如何将下面的抽象bean转换为@Bean
?
<bean id="sample" class="com.test.core.common.AbstractClass" abstract="true">
<property name="sample1" ref="sample1" />
<property name="sample2" ref="sample2" />
</bean>
4条答案
按热度按时间ffvjumwh1#
用纯Java编写抽象基类(没有任何Spring耦合):
请注意,添加一个带参数的构造函数(抽象类和具体类都有)使注入更容易,依赖关系更清晰。
你有两种方法:
1)用
@Component
注解具体类。例如:
该第一种方式具有短的优点:只是要添加注解。
但它实际上使子类成为可能由Spring上下文加载的bean。
2)或者,在
Configuration
类中声明bean。例如:
第二种方法更详细,但其优点是不需要修改子类代码,并且还可以让类的客户端决定类是否应该是bean。
每一种方法都有其优点和缺点。
所以要根据具体要求来使用。
pdkcd3nj2#
没有必要转换这个代码。您只需要将扩展
com.test.core.common.AbstractClass
的类声明为spring托管bean,方法是使用@Component
或@Service
注解它们,或者在配置类中声明一个使用@Bean
注解的方法。Java配置中一般不需要**“抽象bean”**,甚至没有等价物。在xml配置中需要它来实现参数继承,现在可以通过普通的java方法实现。查找Spring Core开发人员example from Stephane Nicoll。
nnsrf1az3#
由于Java有自己的抽象类和继承机制,因此您不需要在spring耦合中执行以下代码的耦合。
在XMLconfig中,您需要这样做来指定子bean继承的模板。但由于Springboot使用Java配置,这部分直接通过Java继承处理。
这意味着您可以将这个抽象类声明为普通的Java抽象类,并且只将子类视为bean,而不必担心抽象父类。
hvvq6cgz4#
当我们 * 想要 * 将
abstract class
或interface
示例化为@Bean
(*with spring-java-config *)时,我们通常可以:1.示例化一个anonymous inner class。
1.覆盖所有抽象方法!;(
因此对于Method注入,它看起来像:
另一个好的(?)问题:最新的(“当前的”)"spring-javaconfig/docs"在哪里???
另见: