Frühling @autowired nicht dazu gedacht, für nicht-singleton-Container?

Ich habe eine MyTask - Klasse, die implementiert Runnable und es kann viele solche Objekte instanziiert werden, in jedem gegebenen moment. Es gibt bestimmte Eigenschaften, die ich möchte autowire in MyTask Klasse.

Aber ich denke , wenn ich daneben MyTask mit @Component dann wird es werden wie ein spring-managed-singleton-richtig? Das ist nicht das, was ich will, ich brauche viele unabhängige Instanzen dieser Klasse werden von einem TaskExecutor.

Also meine Frage(N):

  • a) Bin ich grundlegend falsch in meinem Verständnis der @Component annotation? Tut Sie es NICHT machen MyTask in eine spring-managed-singleton?
  • b) gibt es eine andere Anmerkung, die ich verwenden soll, so dass der Frühling erkennt @Autowired und injiziert Eigenschaft?
  • c) Ist der Frühling autowiring nicht dazu gedacht, für nicht-singleton-Container-Klassen, wie MyTask?

Update # 1 - Diese funktionieren nicht:

public class MyTask implements Runnable { //I want this class to be non-singleton
    @Autowired
    public SomeSpecialSpringConfiguredConnectionClass blah; //this is the singleton bean that should be injected
    @Override
    public void run() {
        //BLAH IS NULL, this shouldn't be NULL, that is not what I want
        //which makes sense considering Spring never knew it had to work
        //on this class
    }
}

@Component
public class MyTask implements Runnable { //I want this class to be non-singleton
    @Autowired
    public SomeSpecialSpringConfiguredConnectionClass blah; //this is the singleton bean that should be injected
    @Override
    public void run() {
        //this works BUT now MyTask is singleton :(
    }
}

@Component
@Scope("prototype")
public class MyTask implements Runnable { //I want this class to be non-singleton
    @Autowired
    public SomeSpecialSpringConfiguredConnectionClass blah; //this is the singleton bean that should be injected
    @Override
    public void run() {
        //BLAH IS NULL, again ... this shouldn't be NULL, that is not what I want
    }
}

Update # 2 - Während der Wartezeit für einige weitere Vorschläge auf, wie es zu tun den einfachen Weg, ich bin auf der Suche in: Using AspectJ to dependency inject domain objects with Spring als alternative.

Sie können geben Sie den Bereich für eine Spring bean. Wenn Sie markieren Sie es als Prototyp (statt Standard-sigleton), dann u bekommen neue Instanz zu jeder Zeit. Sie können markieren Sie die Klasse als Prototyp, indem diese annotation auf Klassenebene @Scope("Prototyp")
Danke! Aber das funktioniert nicht für das, was ich verlange, ich versuchte es bereits.
wie sind Sie gehen zu verwenden, MyTask? und was meinst du mit " funktioniert nicht mit @Scope("Prototyp")?
Nicht sicher, warum, dass der Umfang nicht funktioniert. Es sei denn vielleicht sind Sie dependency Injektion MyTask in ein weiteres singleton, in welchem Fall Sie brauchen, um sich in die Methode der Injektion oder AOP. Werfen Sie einen Blick auf stackoverflow.com/questions/829463/...
erarbeitet im update#1 zu erklären, was ich meine doesn't work with @Scope("prototype")

InformationsquelleAutor pulkitsinghal | 2014-01-01

Schreibe einen Kommentar