@autowired annotation Problem, nicht injizierenden bean in der Klasse, mit Spring3.0, hibernate
folgende ist meine Klasse:
package com.abc.trade.util;
public class StockTraderLogger {
static Logger logger = Logger.getLogger("StockTraderLogger");
@Autowired
ConfigService configService;
public static void debug(Object className, Object logMessage) {
try {
System.out.println("in debug.. ");
StockTraderLogger stl =new StockTraderLogger();
stl.addMessage(""+convertToString(className)+"\t"+convertToString(logMessage));
System.out.println("in debug..post ");
} catch (DataAccessException e) {
System.out.println("Caught exception...");
e.printStackTrace();
}
}
public void addMessage(String message) throws DataAccessException {
System.out.println("in add message of util. ");
System.out.println("String: " + configService);
configService.addMessage(message);
}
}
@Autowire
annotation nicht funktioniert. Es zeigt den Wert configService
als null, wenn Sie aufgerufen addMessage
Methode. aber es ist richtig injiziert, die in einigen meiner Klassen Controller, aber nicht hier.
Kann mir jemand erklären was ist das problem? und wie dieses Problem zu beheben?
Code für XML ist:(beansdefinition.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.abc.trade.util"/>
<context:component-scan base-package="com.abc.trade.service"/>
<!-- Hibernate Configuration -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
<list>
<value>com.abc.trade.model.Order</value>
<value>com.abc.trade.model.Profile</value>
<value>com.abc.trade.model.Log</value>
</list>
</property>
</bean>
<tx:annotation-driven/>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="commonService" class="com.abc.trade.framework.service.CommonServiceImplementor">
<property name="commonDao" ref="commonDao"/>
</bean>
<bean id="commonDao" class="com.abc.trade.framework.dao.HibernateDAO">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="configService" class="com.abc.trade.service.ConfigServiceImplementor" parent="commonService">
</bean>
<import resource="../context/springws-servlet.xml"/>
</beans>
Anderen XML ist:(Springmvc-servlet.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:webflow="http://www.springframework.org/schema/webflow-config"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/webflow-config
http://www.springframework.org/schema/webflow-config/spring-webflow-config-2.0.xsd">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<context:component-scan base-package="com.abc.trade.controller" />
<context:component-scan base-package="com.abc.trade.util"/>
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" />
</bean>
<!-- Exception Resolver -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="com.abc.trade.framework.exception.DataAccessException">
errorPage</prop>
<prop key="java.sql.SQLException">errorPage</prop>
<prop key="java.lang.Exception">errorPage</prop>
</props>
</property>
</bean>
</beans>
Vielen Dank im Voraus.
ConfigService
:
package com.abc.trade.service;
import org.springframework.stereotype.Service;
import com.abc.trade.framework.exception.DataAccessException;
public interface ConfigService {
public void addMessage(String message) throws DataAccessException;
}
Config Service-Implementierung:
package com.abc.trade.service;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.abc.trade.framework.exception.DataAccessException;
import com.abc.trade.framework.service.CommonServiceImplementor;
import com.abc.trade.model.Log;
import com.abc.trade.model.Mode;
import com.abc.trade.util.StockTraderLogger;
@Service("configService")
public class ConfigServiceImplementor extends CommonServiceImplementor implements ConfigService{
String errorMessage = "";
@Override
public void addMessage(String message) {
System.out.println("in add message of service...........");
Log log = new Log();
try{
log.setMessage(message);
System.out.println("Message is: "+message);
int i=save(log);
}catch(Exception e)
{
errorMessage = "Error in saving debug message";
e.printStackTrace();
//throw new DataAccessException(errorMessage);
}
}
}
Was ist das volle Paket Klasse name des ConfigService Klasse? Ich glaube, standardmäßig ist die Injektion nach Typ, nicht nach Namen.
Ich autowired diese bean im controller und es ist in Ordnung, aber wenn ich autowired in einigen anderen Klassen, dann ist es nicht immer autowired.
Hast du zufällig das problem lösen sagar????
Nein, Derzeit bin ich nicht im Frühjahr.
Ich autowired diese bean im controller und es ist in Ordnung, aber wenn ich autowired in einigen anderen Klassen, dann ist es nicht immer autowired.
Hast du zufällig das problem lösen sagar????
Nein, Derzeit bin ich nicht im Frühjahr.
InformationsquelleAutor Sagar | 2011-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
StockTraderLogger ist nicht deklariert als spring-bean und existiert nicht im Frühjahr Kontext und aus diesem Grund die Einspritzung nicht funktioniert.
oder
InformationsquelleAutor Erhan Bagdemir
Hier ist das problem im debug-Methode:
Dies ist nicht der Frühling es geschafft. Können Sie injizieren Spring managed bean in nicht gemanagten zwei Möglichkeiten.
Hier können Sie injizieren configService in StockTraderLogger:
1) Durch AutowireCapableBeanFactory:
2) Durch die Verwendung von Spring AOP @Konfigurierbare annotation markiert eine Klasse als geeignet für den Frühling-gesteuerte Konfiguration(wie Objekte instanziiert mit dem 'new' - operator).
Finden Sie weitere Informationen über das spring aop Weise hier.
InformationsquelleAutor Prasad
Hinzufügen
applicationContext.xml
:xmlns:mvc="http://www.springframework.org/schema/mvc"
und
http://www.springframework.org/schema/mvc
zuxsi:schemalocation
mvc-annotation-driven ist erforderlich für die Anmerkungen-Controller und andere Funktionen:
<mvc:annotation-driven />
InformationsquelleAutor Rahul
Ich denke, Sie sind fehlt
Stellen Sie außerdem sicher, dass Ihre ConfigService Klasse hat
Annotation, wird diese Klasse Kandidat für autowiring.
und der Ursache, die Sie verwenden sollten
für den ConfigService package name.
component-scan ist es in meinen XML-Dateien können Sie sehen, dass in XML-code, den ich geteilt in der Frage selbst. muss ich es ändern?
Sie müssen changeor fügen Sie neue ein, die sich auf configService Paket
können Sie überprüfen beansdefinition.xml ich habe Hinzugefügt, scan-Komponente, die sich auf service-Paket. Aber gleiche Leistung.
Könnten Sie bitte post ConfigService code und es ist Schnittstelle code?
InformationsquelleAutor danny.lesnik