i have problems autowire annotation in 1 of services. have spent lot of hours find solution don't have idea i'm doing wrong. app looks this.
here controller:
package control.peso.controller; import javax.servlet.http.httpservletrequest; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.responsebody; import control.peso.data.resumenmedicionpeso; import control.peso.service.homeservice; @controller public class homecontroller { @autowired private homeservice homeservice; //nopmd @requestmapping(value = "json/resumen_mediciones.action") @responsebody public final resumenmedicionpeso datajsonpeso(final httpservletrequest req) { final resumenmedicionpeso peso = homeservice.getresumenmediciones(); return peso; } } my service layer:
package control.peso.service; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; import org.springframework.transaction.annotation.transactional; import control.peso.dao.pesodao; import control.peso.data.resumenmedicionpeso; @service @transactional(readonly = true) public class homeservice { @autowired private pesodao pesodao; //nopmd public final resumenmedicionpeso getresumenmediciones() { final resumenmedicionpeso resummedicionpeso = new resumenmedicionpeso(); resummedicionpeso.setmaxpeso(pesodao.getmaxpeso()); resummedicionpeso.setminpeso(pesodao.getminpeso()); resummedicionpeso.setmaxgrasa(pesodao.getmaxgrasa()); resummedicionpeso.setmingrasa(pesodao.getmingrasa()); resummedicionpeso.setmaxporcengrasa(pesodao.getmaxporcengrasa()); resummedicionpeso.setminporcengrasa(pesodao.getminporcengrasa()); resummedicionpeso.setmaxmusculo(pesodao.getmaxmusculo()); resummedicionpeso.setminmusculo(pesodao.getminmusculo()); resummedicionpeso.setmaxporcenmusculo(pesodao.getmaxporcenmusculo()); resummedicionpeso.setminporcenmusculo(pesodao.getminporcenmusculo()); return resummedicionpeso; } } my dao:
package control.peso.dao; import java.util.list; import org.hibernate.sessionfactory; import control.peso.model.medicionpeso; public class pesodao implements ipesodao { private sessionfactory sessionfactory; public final sessionfactory getsessionfactory() { return sessionfactory; } public final void setsessionfactory( final sessionfactory psessionfactory) { this.sessionfactory = psessionfactory; } @override public final void addpeso(final medicionpeso peso) { getsessionfactory().getcurrentsession().save(peso); //nopmd } @override public final void updatepeso(final medicionpeso peso) { getsessionfactory().getcurrentsession().update(peso); //nopmd } @override public final void deletepeso(final integer idpeso) { getsessionfactory().getcurrentsession() .delete(new medicionpeso(idpeso)); } @override public final medicionpeso getpesobyid(final integer idpeso) { @suppresswarnings("unchecked") //nopmd final list<medicionpeso> list = getsessionfactory() // nopmd .getcurrentsession() .createquery("from medicionpeso idpeso = ?") .setparameter(0, idpeso).list(); return list.get(0); //nopmd } @override public final list<medicionpeso> getpesos() { @suppresswarnings("unchecked") final list<medicionpeso> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("from medicionpeso medicionpeso " + "order medicionpeso.fechamedicion desc") .list(); return list; } public final float getmaxpeso() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(peso) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getminpeso() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select min(peso) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getmaxgrasa() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(pesograsa) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getmingrasa() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select min(pesograsa) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getmaxporcengrasa() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(pesograsa) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getminporcengrasa() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select min(porcentajegrasa) medicionpeso") .list(); return (float) list.get(0); //nopmd } /** * recupera la medicion de musculo con valor maximo. * @return el valor maximo de las mediciones de musculo. */ public final float getmaxmusculo() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(porcentajegrasa) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getminmusculo() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select min(pesomusculo) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getmaxporcenmusculo() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(porcentajemusculo) medicionpeso") .list(); return (float) list.get(0); //nopmd } public final float getminporcenmusculo() { @suppresswarnings("unchecked") final list<float> list = getsessionfactory() //nopmd .getcurrentsession() .createquery("select max(porcentajemusculo) medicionpeso") .list(); return (float) list.get(0); //nopmd } } my dao interface:
package control.peso.dao; import java.util.list; import control.peso.model.medicionpeso; public interface ipesodao { void addpeso(medicionpeso peso); void updatepeso(medicionpeso peso); void deletepeso(integer idpeso); medicionpeso getpesobyid(integer idpeso); list<medicionpeso> getpesos(); } this dispatcher-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:mvc="http://www.springframework.org/schema/mvc" 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/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!--routes --> <mvc:view-controller path="/" view-name="home"/> <mvc:view-controller path="/home" view-name="home"/> <mvc:view-controller path="/medicion" view-name="medicion_peso"/> <!-- scans classpath of application @components deploy beans --> <context:component-scan base-package="control.peso" /> <!-- configures @controller programming model --> <mvc:annotation-driven /> <!-- misc --> <!-- <bean id="viewresolver" class="org.springframework.web.servlet.view.urlbasedviewresolver"> <property name="viewclass" value="org.springframework.web.servlet.view.jstlview" /> <property name="prefix" value="/web-inf/jsp/" /> <property name="suffix" value=".jsp" /> </bean> --> <!-- tiles resolver --> <bean id="viewresolver" class="org.springframework.web.servlet.view.urlbasedviewresolver"> <property name="viewclass"> <value> org.springframework.web.servlet.view.tiles2.tilesview </value> </property> </bean> <bean id="tilesconfigurer" class="org.springframework.web.servlet.view.tiles2.tilesconfigurer"> <property name="definitions"> <list> <value>/web-inf/tiles.xml</value> </list> </property> </bean> <!-- application message bundle --> <bean id="messagesource" class="org.springframework.context.support.reloadableresourcebundlemessagesource"> <property name="basename" value="classpath:messages" /> <property name="defaultencoding" value="utf-8" /> </bean> <!-- json objets definition --> <bean class="org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter"> <property name="messageconverters"> <list> <bean class="org.springframework.http.converter.json.mappingjacksonhttpmessageconverter" /> </list> </property> </bean> <!-- beans declaration --> <bean id="medicionpeso" class="control.peso.model.medicionpeso" /> <!-- user dao declaration --> <bean id="pesodao" class="control.peso.dao.pesodao"> <property name="sessionfactory" ref="sessionfactory" /> </bean> <!-- data source declaration --> <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource" destroy-method="close"> <property name="driverclass" value="com.mysql.jdbc.driver" /> <property name="jdbcurl" value="jdbc:mysql://localhost:3306/juan" /> <property name="user" value="root" /> <property name="password" value="" /> <property name="maxpoolsize" value="10" /> <property name="maxstatements" value="0" /> <property name="minpoolsize" value="5" /> </bean> <!-- session factory declaration --> <bean id="sessionfactory" class="org.springframework.orm.hibernate4.localsessionfactorybean"> <property name="datasource" ref="datasource" /> <property name="annotatedclasses"> <list> <value>control.peso.model.medicionpeso</value> </list> </property> <property name="hibernateproperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.mysqldialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- enable configuration of transactional behavior based on annotations --> <tx:annotation-driven transaction-manager="txmanager" /> <!-- transaction manager defined --> <bean id="txmanager" class="org.springframework.orm.hibernate4.hibernatetransactionmanager"> <property name="sessionfactory" ref="sessionfactory" /> </bean> </beans> so when launch web-app, controller autowires correctly service, dao object in service has null value (not injected properly).
any ideas?
it's curious because service, same dao injected.
thanks
in homeservice, you've specified implementation of ipesodao, not interface. try changing ipesodao instead , see if helps.
in addition, may want create interface ihomeservice , have existing homeservice implement it, again, changing controller reference interface, not implementation
Comments
Post a Comment