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