Spring 弹簧@自动接线不工作(不总是)
我的一项服务中的autowire批注有一些问题。我花了很多时间寻找解决方案,但我不知道我做错了什么。我的应用程序看起来像这样 这是我的控制器:Spring 弹簧@自动接线不工作(不总是),spring,spring-mvc,annotations,autowired,Spring,Spring Mvc,Annotations,Autowired,我的一项服务中的autowire批注有一些问题。我花了很多时间寻找解决方案,但我不知道我做错了什么。我的应用程序看起来像这样 这是我的控制器: package control.peso.controller; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereot
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;
}
}
我的服务层:
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;
}
}
我的刀:
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 where 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 by medicionPeso.fechaMedicion desc")
.list();
return list;
}
public final Float getMaxPeso() {
@SuppressWarnings("unchecked")
final List<Float> list = getSessionFactory() //NOPMD
.getCurrentSession()
.createQuery("select max(peso) from 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) from 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) from 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) from 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) from 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) from 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) from 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) from 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) from 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) from MedicionPeso")
.list();
return (Float) list.get(0); //NOPMD
}
}
package control.peso.dao;
导入java.util.List;
导入org.hibernate.SessionFactory;
进口管制.peso.model.MedicionPeso;
公共类比索道实现了IPesoDAO{
私人会话工厂会话工厂;
公共最终会话工厂getSessionFactory(){
返回工厂;
}
公共最终工厂(
最终会议工厂(会议工厂){
this.sessionFactory=pssessionfactory;
}
@凌驾
公共最终无效附加比索(最终MedicionPeso){
getSessionFactory().getCurrentSession().save(比索);//NOPMD
}
@凌驾
公共最终作废更新peso(最终MedicionPeso){
getSessionFactory().getCurrentSession().update(比索);//NOPMD
}
@凌驾
公共最终无效删除PESO(最终整数idPeso){
getSessionFactory().getCurrentSession()
.删除(新医疗设备采购订单(idPeso));
}
@凌驾
公共最终MedicionPeso getPesoById(最终整数idPeso){
@SuppressWarnings(“未选中”)//NOPMD
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“来自MedicionPeso,其中idPeso=?”)
.setParameter(0,idPeso).list();
返回列表。get(0);//NOPMD
}
@凌驾
公共最终清单getPesos(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“来自MedicionPeso MedicionPeso”
+“medicionPeso.fechamedical desc命令”)
.list();
退货清单;
}
公共最终浮动getMaxPeso(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择最大值(比索))
.list();
return(Float)list.get(0);//NOPMD
}
公开最终浮动getMinPeso(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择最小值(比索))
.list();
return(Float)list.get(0);//NOPMD
}
公共最终浮动getMaxGrasa(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择max(pesoGrasa))
.list();
return(Float)list.get(0);//NOPMD
}
公开最终浮动getMinGrasa(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择最小值(pesoGrasa))
.list();
return(Float)list.get(0);//NOPMD
}
公共最终浮动GetMaxPorchengrasa(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择max(pesoGrasa))
.list();
return(Float)list.get(0);//NOPMD
}
公共最终浮动GetMinPorchengrasa(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择min(porcentajeGrasa))
.list();
return(Float)list.get(0);//NOPMD
}
/**
*恢复肌肉的力量。
*@return El valor maximo de las mediciones de musculo。
*/
公开最终浮动getMaxMusculo(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择max(porcentajeGrasa))
.list();
return(Float)list.get(0);//NOPMD
}
公开最终浮动getMinMusculo(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择最小值(pesoMusculo))
.list();
return(Float)list.get(0);//NOPMD
}
公共最终浮动GetMaxPorchenMusculo(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择max(porcentajeMusculo))
.list();
return(Float)list.get(0);//NOPMD
}
公共最终浮动GetMinPorchenMusculo(){
@抑制警告(“未选中”)
最终列表List=getSessionFactory()//NOPMD
.getCurrentSession()
.createQuery(“从MedicionPeso中选择max(porcentajeMusculo))
.list();
return(Float)list.get(0);//NOPMD
}
}
我的dao接口:
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();
}
package control.peso.dao;
导入java.util.List;
进口管制.peso.model.MedicionPeso;
公共接口IPesoDAO{
无效附加比索(MedicionPeso比索);
无效更新peso(MedicionPeso比索);
void deletePeso(整数idPeso);
MedicionPeso getPesoById(整数idPeso);
列出getPesos();
}
这是我的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 the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="control.peso" />
<!-- Configures the @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 the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager" />
<!-- Transaction Manager is defined -->
<bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="SessionFactory" />
</bean>
</beans>
org.springframework.web.servlet.view.tiles2.TilesView
/WEB-INF/tiles.xml
<!-- User DAO Declaration -->
<bean id="PesoDAO" class="control.peso.dao.PesoDAO">
<property name="sessionFactory" ref="SessionFactory" />
</bean>
@Service
@Transactional(readOnly = true)
public class HomeService {
@Autowired
private PesoDAO pesoDAO; //NOPMD
}
@Component("pesoDao")
public class PesoDAO implements IPesoDAO {
private SessionFactory sessionFactory;
}
@Service("homeService")
@Transactional(readOnly = true)
public class HomeService {
@Autowired
@Qualifier("pesoDao")
private PesoDAO pesoDAO; //NOPMD
}