1
我正在將非Spring代碼轉換爲Spring(v3.2)代碼。我已經閱讀了Spring文檔,但是我在遇到以下情況時遇到了困難。將代碼轉換爲Spring註釋
類Foo和Buz由Spring管理,並且是單身人士。 Class Bar和MyHyperlinkListener需要由Spring進行管理,並且應該是原型(儘管我不確定如何正確註釋這些)。
Bar內部的Buz實例當前爲null,因爲Bar沒有被Spring管理。這些類如何正確註釋以允許這樣做?是否需要創建工廠類的Bar,以及它會是什麼樣子?
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);
}
}
謝謝!當我給出這個嘗試時,我得到了關於沒有匹配[MyHyperlinkListener]類型的bean的新錯誤。我使用Configurable註解了MyHyperlinkListener類,使用Inject註解了構造函數,但是我仍然得到了相同的消息。然後我在MyConfiguration類中創建了一個createHyperlinkListener Bean,並調用它來代替從Foo內部直接調用新的MyHyperlinkListener。 – user973479 2013-02-26 14:07:49
這給了我一個關於沒有定義[javax.swing.JFrame]類型的唯一bean的新消息。 MyHyperLinkListener在來自不同JFrames的代碼中被調用,所以我不能只綁定一個。有什麼建議麼?自從你的建議以來,我甚至在正確的軌道上完成了自己的工作? – user973479 2013-02-26 14:08:34
注意 - 可配置對我無效,因爲我還需要AspectJ,所以我使用的是配置方式。我仍然可以通過 – user973479 2013-02-26 14:16:09