Autowiring in Spring bean (@Component) creato con una nuova parola chiave

Ho due fagioli spring come segue:

@Component("A") @Scope("prototype") public class A extends TimerTask { @Autowired private CampaignDao campaignDao; @Autowired private CampaignManager campManger; A(){ init_A(); } } 

Devo creare un nuovo object di A con una nuova parola chiave, a causa di un codice legacy

 @Component("B") @Scope("prototype") public class B{ public void test(){ A a = new A(); } } 

quando Esegui -> i fagioli primaverili nella class A sono nulli, posso creare una nuova istanza del bean spring A e utilizzare ancora l’autowiring al suo interno?

Il tuo componente “A” non viene creato dal contenitore Spring, quindi le dipendenze non vengono iniettate. Tuttavia, se hai bisogno di supportare del codice legacy (come ho capito dalla tua domanda), puoi usare @Configurable annotazione @Configurable e la tessitura di build / compile time:

 @Configurable(autowire = Autowire.BY_TYPE) public class A extends TimerTask { // (...) } 

Quindi, Spring invierà le dipendenze autowired al componente A, indipendentemente dal fatto che sia istanziato dal contenitore stesso, o se viene istanziato in un new codice legacy.

Ad esempio, per impostare la tessitura build-time con il plugin Maven devi:

  1. Aggiungi al contesto dell’applicazione Spring
  2. Configura il plugin Maven AspectJ :

nella sezione dei plugin di compilazione:

    org.codehaus.mojo aspectj-maven-plugin 1.4  1.6 UTF-8   org.springframework spring-aspects    warning     compile test-compile       

… e la sezione delle dipendenze:

  org.springframework spring-aspects 3.1.1.RELEASE   org.aspectj aspectjrt 1.6.11  

Si prega di consultare il riferimento Spring per ulteriori dettagli: http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop.html#aop-atconfigurable

Poiché stai creando l’object della class A usando un nuovo operatore, non stai ottenendo i campi autowired in quell’object e trovandoli nulli. Cerca di prendere il fagiolo dal contenitore spring.

Spero che questo ti aiuti. Saluti.