[英]Converting code to Spring annotations
我正在將非Spring代碼轉換為Spring(v3.2)代碼。 我已經閱讀了Spring文檔,但無法解決以下情況。
Foo和Buz類由Spring管理,屬於單例。 Bar和MyHyperlinkListener類需要由Spring管理,並且應該是原型(盡管我不確定如何正確注釋它們)。
Bar內部的Buz實例當前為null,因為Bar不受Spring的管理。 如何正確注釋這些類以允許這樣做? 是否需要創建Bar的Factory類,這會是什么樣?
Bar的構造函數正在Foo類內部傳遞“ this”(又名JFrame)。 我不確定如何在Spring中修改代碼以處理“ this”。 我猜這是另一個接受JFrame的Factory,但是我不確定如何編寫代碼。
@Named
public class Foo extends JFrame{
private Bar bar;
private void doSomeWork(int x){
bar = new Bar( new MyHyperlinkListener(this), x);
}
}
public class Bar extends JPanel{
@Inject
private Buz buz;
public Bar(MyHyperlinkListener mhl, int x){
}
}
public class MyHyperlinkListener implements HyperlinkListener{
private JFrame frame;
public MyHyperlinkListener(JFrame frame){
this.frame=frame;
}
//...code omitted
}
@Named
public class Buz{
}
@Configuration
public class MyConfiguration{
}
public class RunMe{
public static void main(String[] args){
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("myPackage");
context.refresh();
context.registerShutdownHook();
Foo foo = context.getBean(Foo.class);
foo.setVisible(true);
}
}
您可以將Bar
類設置為@Configurable ,這將允許Spring在創建實例時對其進行管理。
@Configurable
public class Bar extends JPanel{
@Inject
private Buz buz;
public Bar(MyHyperlinkListener mhl, int x){
}
}
另外,您可以使用bean工廠來創建Bar
實例。 這將具有相同的效果:
@Configuration
public class BarFactory
{
@Bean
public Bar createBar(MyHyperlinkListener mhl, int x) {
return new Bar(mhl, x);
}
}
這兩種方法都是有效的,並且主要區別在於它們公開管理的方式。 它們還將允許您希望使用的構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.