Unzufrieden Abhängigkeit Ausnahme in der Erstellung von beans mit Spring
Ich versuche, JPA für meine spring-Anwendung. Ich habe integriert die JPATransactionManager & LocalEntityManagerFactoryBean in AppConfig-Klasse. Nun, wenn ich versuche, rufen Sie die Methode ist, die in DaoImpl, die AppConfig ist nicht in der Lage, Autowire die Klassen. Hier ist mein code
Test Class
public class Test {
public static void main(String[] args) {
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
BbDao personService = context.getBean(BbDao.class);
personService.getDealByDealId("0194541605021NJMAPFU");
context.close();
}
}
AppConfig
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan(basePackages = "net.bb.spring")
public class AppConfig{
@Bean
public LocalEntityManagerFactoryBean getEntityManagerFactoryBean() {
LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
factoryBean.setPersistenceUnitName("MyPersistence");
return factoryBean;
}
@Bean
public JpaTransactionManager geJpaTransactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(getEntityManagerFactoryBean().getObject());
return transactionManager;
}
}
ConfirmPurchaseController
@RestController
public class ConfirmPurchaseController {
private Logger logger = Logger.getLogger(ConfirmPurchaseController.class);
@Autowired
private MyService myService;
@GetMapping("/purchase")
public ResultDto confirmpurchase(HttpServletResponse response) throws ClassNotFoundException, IOException {
//Business Logic
}
}
MyService
@Component
public interface MyService {
//Methods defined
}
MyServiceImpl
@Service
public class MyServiceImpl implements MyService, ServletContextAware {
private ServletContext servletContext;
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
public ServletContext getServletContext() {
return servletContext;
}
//Added the implemented methods of the MyService Interface
}
Ausnahme wirft es ist
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myServiceImpl': Unsatisfied dependency expressed through field 'servletContext'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.ServletContext' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
und das Fehlerprotokoll ist
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'confirmPurchaseController': Unsatisfied dependency expressed through field 'myService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myServiceImpl': Unsatisfied dependency expressed through field 'servletContext'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.ServletContext' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:84)
at net.bb.spring.controller.Test.main(Test.java:14)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myServiceImpl': Unsatisfied dependency expressed through field 'servletContext'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.ServletContext' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
... 14 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.ServletContext' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
... 27 more
Irgendwelche Ideen wäre sehr hilfreich für mich.
P. S : Im mit Konfiguration als Anmerkungen, keine XML -
funktioniert diese Hilfe? stackoverflow.com/questions/14895728/...
Konnten Sie teilen myService Klasse ?
aktualisiert mit myService Klasse
Ich habe ServletContext-und eine setter-Methode in meinem MyServiceImpl und Hinzugefügt implementiert ServletContextAware, aber immer noch die Fehlermeldung ist die gleiche
Er bedeutet die Umsetzung von MyServiceImpl. Fügen Sie den code für diese Klasse
Konnten Sie teilen myService Klasse ?
aktualisiert mit myService Klasse
Ich habe ServletContext-und eine setter-Methode in meinem MyServiceImpl und Hinzugefügt implementiert ServletContextAware, aber immer noch die Fehlermeldung ist die gleiche
Er bedeutet die Umsetzung von MyServiceImpl. Fügen Sie den code für diese Klasse
InformationsquelleAutor Yakhoob | 2017-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es nicht eine Antwort, jedoch kann ich nicht ein Kommentar noch.
Haben Sie versucht, autowire ein ServletContext über setter-Methode?
- entfernen Sie die @Autowired von Eigentum
- entfernen Sie einen der Ihren setter für Kontext (unnötige Doppelarbeit)
- markieren Sie einen setter als @Autowired
Außerdem entfernen @Component-annotation von MyService ist es unnötig, wenn Sie mit @Service-annotation in der Umsetzung.
Nun, die einem zu Folgen?
Sie können sehen, dass in meinem code, die ich verwendet haben ServletContext für meine Impl-Klasse. Ich habe versucht, Ihre Weise auch. Aber immer noch die gleiche Fehlermeldung
Versuchen Sie es trotzdem mit
public void setContext(ServletContext context) { this.context = context; }
setter, entfernen Sie Vorherige und überprüfen, ob es funktioniert. Erinnern Sie auch, dass nicht benötigte @ - Komponente in MyService. Es würde uns Auskunft geben, wenn die setter-injection funktioniert.Ich habe entfernt @Komponente in MyService und fügte hinzu, die setContext in meinem Impl-Klasse mit Autowired annotation. Aber ich bin immer dieser Fehler, Verursacht durch: org.springframework.Bohnen.factory.NoSuchBeanDefinitionException: Keine Qualifikation bean des Typs " javax.- servlet.ServletContext' verfügbar: voraussichtlich mindestens 1 Bohne, die als qualifiziert autowire-candidate. Abhängigkeit Anmerkungen: {@org.springframework.Bohnen.factory.Anmerkung.Autowired(required=true)}
InformationsquelleAutor staszko032
Als pro Apache Tomcat-Dokumentation, eine
ServletContext
Was bedeutet, dass ein ServletContext ist nur gültig in einem Servlet-Container wie Apache Tomcat. Aber wie ich sehen, können Sie versuchen, führen Sie eine normale Java Anwendung durch erstellen Bohnen in einer main-Methode, die macht die Existenz von
ServletContext
ungültig.Also, was Sie tun müssen, ist:
SCHRITT 1: Erstellen Sie Ihre AppConfig und überschreiben die benötigten Methoden.
SCHRITT 2: Erstellen WebInitializer zu initialisieren Dispatcher Servlet
SCHRITT 3: Erstellen Sie Ihr Service-layer zu autowire ServletContext
SCHRITT 4: Bauen Sie Ihre Anwendung zu einer war-Datei
SCHRITT 5: Bereitstellen der war-Datei webapp-Ordner von Tomcat (Falls Sie Tomcat verwenden)
SCHRITT 6: Starten Sie Tomcat
InformationsquelleAutor Shyam Baitmangalkar