2017-05-05 4 views
0

Ich habe eine Klasse, die wie folgt beginnt: „. Konnte nicht autowire Keine Bohnen gefunden Typ‚Session‘“Wie kann ich eine Instanz einer Java-Klasse autowire?

import javax.mail.Session; 
//... more imports 

@Component("eMailUtility") 
public class MailUtility { 

    @Autowired 
    Session mailSession; 
    //... 
} 

Meine IDE sagt mir

Diese Nachricht überrascht mich nicht, aber ich bin nicht sicher, wie man es repariert. Sitzung ist eine letzte Klasse mit Factory-Methoden, aber keine öffentlichen Konstruktoren. Ich kann leicht irgendwo eine Session instantiieren, aber ich weiß nicht, was ich tun muss, um es als Ziel einer autowirierten Injektion erkennbar zu machen. Alle Beispiele, die ich im Internet gefunden habe, zeigen, wie man eine Instanz einer Klasse, die ich geschrieben habe, autowire, was mir hier nicht weiterhilft.

(Eine detaillierte Erklärung, wie genau Autowire funktioniert, die nichts beschönigt, wäre sehr hilfreich, aber ich kann nicht scheinen, eine zu finden. Wenn Sie einen guten Link wissen, wäre das hilfreich.)

Antwort

1

Sie müssten eine Methode in einer Klasse erstellen, die mit @Configuration annotiert ist, die ein Session-Objekt zurückgibt und diese Methode mit @Bean annotiert. In Ihrem Fall etwas wie folgt aus:

@Bean 
public Session session() { 
    return <instance>; 
} 

Wenn es eine Ihrer eigenen Klassen, die Sie auch mit @Component annotieren könnte, oder andere Anmerkungen, die sich mit @Component kommentiert werden. Spring würde dann die Klasse mit dieser Anmerkung finden und automatisch die Bean für Sie erstellen.

Für eine Erklärung über @Autowired Sie auf diese Antwort aussehen: Understanding Spring @Autowired usage

Verwandte Themen