Warum verwenden Sie bei Verwendung von AspectJ @Component über @Configurable.
Ich habe Spring und AspectJ für die Unterstützung von @Transactional, Aspekte zum Selbstinaktivieren und die Injektion in JPA-Entitäten eingerichtet. Das funktioniert großartig.
Ich verwende @Component für die meisten Klassen, die injiziert werden müssen, und sie somit entweder in ihre Abhängigkeiten injiziert. Oder wenn ich nicht kann, injiziere den ApplicationContext und benutze dann getBean () als letzten Ausweg. Und ich reserviere @Configurable nur für JPA-Entitäten (Hibernate), die eine Injektion benötigen. Ich habe auch angefangen, @Configurable für jUnit-Tests zu verwenden, um das Schreiben von Tests einfach zu machen. Das funktioniert auch super.
Aber ich bin neugierig. Wenn AspectJ nun automatisch etwas mit der @Configurable-Annotation injiziert (bejahet), unabhängig davon, wie es konstruiert wurde; getBean (), new (), @Autowired. Warum sollte ich nicht einfach @Configurable für alle meine Beans verwenden? Dann kann ich den Anwendungskontext und getBean () ganz abschaffen, und nur neue () Klassen, die ich nicht injizieren kann.
Ich stelle fest, dass ich die XML-Bean-Konfiguration nicht erwähnt habe. Ich scheue mich nicht davor, aber dieses Projekt benötigt keine. Ich Konstruktor oder Setter injizieren die Abhängigkeiten beim Testen. sehr einfach.
Ein Grund, warum Sie @Configurable
nicht immer verwenden sollten, ist, dass es viel Overhead verursacht: Es dauert oft viel länger, bis die App startet und das Erstellen neuer Instanzen wird langsamer.
Für @Component
brauchen Sie es überhaupt nicht, da normalerweise alle Instanzen von Spring verwaltet werden.
@Component ist eine Spring-Marker-Schnittstelle, die Spring-Hinweise geben kann, wenn es um die automatische Erkennung von Beans geht.
@Configurable ist ein Marker, der von den AOP-Ladezeit-Weben verwendet wird.
Die beiden haben nicht wirklich viel miteinander zu tun.
@Component
ist für Klassen gedacht, die von Spring selbst instanziiert werden, während @Configurable
für Klassen steht, die von Ihrem eigenen Code oder einem anderen Framework instanziiert werden - zum Beispiel Entitäten nach Hibernate oder Servlets durch den Servlet-Container .
Tags und Links spring annotations aop spring-aop configurable