我正在将非 Spring 代码转换为 Spring (v3.2) 代码。我已经阅读了 Spring 文档,但我无法理解下面显示的以下情况。
类 Foo 和 Buz 由 Spring 管理并且是单例。类 Bar 和 MyHyperlinkListener 需要由 Spring 管理并且应该是原型(尽管我不确定如何正确注释这些)。
Bar 内部的 Buz 实例当前为空,因为 Bar 不是由 Spring 管理的。如何正确注释这些类以允许这样做?是否需要为 Bar 创建一个 Factory 类,这会是什么样子?
Bar 的构造函数从 Foo 类内部传递了一个“this”(又名 JFrame)。我不确定如何修改代码以在 Spring 中处理“this”。我猜这是另一个接受 JFrame 的工厂,但我不确定如何编写代码。
@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);
}
}