簡體   English   中英

將代碼轉換為Spring批注

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM