spa*_*y15 12 java spring spring-boot
我要求将旧式spring项目迁移到Spring引导.假设下面的代码片段我必须迁移到Spring引导样式.
在这里我问,如何将下面的抽象bean转换为@Bean?
<bean id="sample" class="com.test.core.common.AbstractClass" abstract="true">
<property name="sample1" ref="sample1" />
<property name="sample2" ref="sample2" />
</bean>
Run Code Online (Sandbox Code Playgroud)
dav*_*xxx 13
用普通Java编写抽象基类(没有任何Spring耦合):
public abstract class AbstractClass{
private Sample1 sample1;
private Sample2 sample2;
public AbstractClass(Sample1 sample1, Sample1 sample2){
this.sample1 = sample1;
this.sample2 = sample2;
}
...
}
Run Code Online (Sandbox Code Playgroud)
请注意,添加带有参数的构造函数(包括抽象类和具体类)使注入更容易,依赖性更清晰.
那你有两种方法:
1)用@Component.注释具体类.
如 :
@Component
public class MyClass extends AbstractClass{
public MyClass (Sample1 sample1, Sample1 sample2){
super(sample1, sample2);
}
}
Run Code Online (Sandbox Code Playgroud)
第一种方式的优点是简短:只需要添加注释.
但它实际上使子类成为可能由Spring上下文加载的bean.
2)或者,在Configuration类中声明bean .
如 :
@Configuration
public class MyConfig{
@Bean
public MyClass myClass(Sample1 sample1, Sample1 sample2){
return new MyClass(sample1, sample1);
}
}
Run Code Online (Sandbox Code Playgroud)
第二种方式更冗长,但有一个优点就是不修改子类代码,也让类的客户端决定该类是否应该是bean.
每种方法都有其优点和缺点.
所以要根据具体要求使用.
| 归档时间: |
|
| 查看次数: |
10079 次 |
| 最近记录: |