о BeanCurrentlyInCreationException, неразрешимой циклической ссылке - PullRequest
0 голосов
/ 29 марта 2012

Добрый день, у меня есть проект, основанный на apache-cxf v 2.5.2, spring 2.5.6 и hibernate vv 3.2.1.Я использую аннотации, чтобы пометить юниты и объекты, которые я сохранил, и у меня возникла проблема при развертывании войны.Предоставляет мне следующее исключение: org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем storeService: невозможно разрешить ссылку на bean-компонент storeService при установке аргумента конструктора;Вложенное исключение: org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка при создании bean-компонента с именем storeService: запрашиваемый bean-компонент В данный момент создается: существует неразрешенная ссылка на цикл?

этофайл applicationContext.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:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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-2.5.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
       ">
    <context:component-scan base-package="com.aironman.core" />
    <tx:annotation-driven transaction-manager="txManager"/>
    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:hibernate.properties"/>
    </bean>
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${database.driverClassName}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="sa"/>
        <property name="password" value=""/>
    </bean>
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=${database.hibernate.dialect}
                hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
                hibernate.show_sql=true
                hibernate.use_sql_comments=true
                hibernate.jdbc.batch_size=0
                hibernate.hbm2ddl.auto=create-drop
                hibernate.default_schema=${hibernate.default_schema}
                hibernate.generate_statistics=true
                hibernate.cache.use_structured_entries=true
            </value>
        </property>
    <property name="annotatedClasses">
            <list>
                <value>com.aironman.core.pojos.Usuario</value>
                <value>com.aironman.core.pojos.Item</value>
                <value>com.aironman.core.pojos.Persona</value>
            </list>
        </property>
    </bean>
</beans>

это bean.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:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
        <!-- DECLARACION DE LOS ENDPOINTS DE LOS WEB SERVICES-->
        <jaxws:endpoint
      id="storeService" implementor="#storeService"
      implementorClass="com.aironman.core.cxf.service.StoreServiceImpl"
      address="/Store" />
</beans>

оба файла включены в web.xml

это веб-служба конечной точки реализации, storeService:

**@Service("storeService")
@WebService(endpointInterface = "com.aironman.core.cxf.service.StoreService")
public class StoreServiceImpl implements StoreService** {

    private Log log = LogFactory.getLog(StoreServiceImpl.class);
    @Autowired
    @Qualifier("servicioUsuarios")
    private ServicioUsuarios            servicioUsuarios;
    @Autowired
    @Qualifier("servicioItems")
    private ServicioItems               servicioItems;
    @Autowired
    @Qualifier("servicioApuntes")
    private ServicioApuntesContables    servicioApuntesContables;
    [B]public StoreServiceImpl()[/B]{
        log.info("CONSTRUCTOR SIN tipo StoreServiceImpl...");
    }
some methods... getters and setters ...
}

это файл ServicioUsuariosImpl:

package com.aironman.core.service;
**@Service("servicioUsuarios")
public class ServicioUsuariosImpl implements ServicioUsuarios** {
    private static ConcurrentHashMap <String,Usuario>hashMapUsuarios = new ConcurrentHashMap <String,Usuario> () ;
    private Log log = LogFactory.getLog(ServicioUsuariosImpl.class);
    @Autowired
    @Qualifier("servicioEncriptacion")
    private ServicioEncriptacion                    servicioEncriptacion;
    @Autowired
    @Qualifier("servicioPersistenciaUsuarios")
    private ServicioPersistenciaUsuarios            servicioPersistenciaUsuarios;
    public ServicioUsuariosImpl(){
        log.info("Constructor SIN tipo ServicioUsuariosImpl...");
        //TODO pendiente cargar el mapa con una llamada al servicioPersistencia
    }
    @PostConstruct
    public void init()
    {
        log.info("init method on ServicioUsuariosImpl. Initializing hashMap...");
        //i need to call persistence layer to fill the hashMap        
    }
    some methods, getters and setters
}

Как видите, эта служба добавилапостоянная служба под названием servicioPersistenciaUsuarios, которая в основном использует дао, помеченный как @ repository.

это файл реализации ServicioPersistenciaUsuariosImpl:

package com.aironman.core.service;
**@Service("servicioPersistenciaUsuarios")
public class ServicioPersistenciaUsuariosImpl implements ServicioPersistenciaUsuarios** {
    @Autowired
    @Qualifier("usuarioHibernateDao")
    private UsuarioHibernateDao usuarioHibernateDao;
    private Log log = LogFactory.getLog(ServicioPersistenciaUsuariosImpl.class);
    public ServicioPersistenciaUsuariosImpl()
    {
        log.info("Constructor ServicioPersistenciaUsuariosImpl...");
    }
    some methods, getters and setters
}

это файл реализации usuarioHibernateDao:

package com.aironman.core.hibernate;
**@Repository
public class UsuarioHibernateDao extends HibernateGenericDao<Usuario, String> implements UsuarioDao**
{
            private Log log = LogFactory.getLog(UsuarioHibernateDao.class);
        [B]@Autowired
        public UsuarioHibernateDao(@Qualifier("sessionFactory")   SessionFactory sessionFactory) [/B]{
            super(sessionFactory);
        }
        some methods...         
}

ServicioUsuariosImpl имеет другую зависимость, servicioEncriptacion, и, как вы можете видеть, это реализация:

package com.aironman.core.service;
@Service("servicioEncriptacion")
public class ServicioEncriptacionImpl implements ServicioEncriptacion
{
      private static final String  algoritmo = "SHA-256";
      private Log log = LogFactory.getLog(ServicioEncriptacionImpl.class);
      private static java.security.MessageDigest diggest ;
      [B]public ServicioEncriptacionImpl()[/B]
      {some code...
      }
      some methods...
    } 

этоФайл реализации ServicioItemsImpl, другая зависимость принадлежит StoreServiceImpl.

package com.aironman.core.service;
**@Service("servicioItems")
public class ServicioItemsImpl implements ServicioItems**{
    private static final ConcurrentHashMap 
            <String,com.aironman.core.pojos.Item>
            //La pk es el isbn del item
            hashMapItems = new ConcurrentHashMap<String,com.aironman.core.pojos.Item>() ;
    private Log log = LogFactory.getLog(ServicioItemsImpl.class);
    @Autowired
    @Qualifier("servicioPersistenciaItems")
    private ServicioPersistenciaItems servicioPersistenciaItems;
    [B]public ServicioItemsImpl()[/B]
    {
        log.info("Constructor SIN TIPO ServicioItemsImpl");    
    }
    [B]@PostConstruct
    public void init()[/B]
    {
        log.info("init method on ServicioItemsImpl. Initializing hashMap...");
    }
    some methods, getters and setters
}

Это файл реализации servicioPersistenciaItems:

package com.aironman.core.service;

@Service("servicioPersistenciaItems")
public class ServicioPersistenciaItemsImpl implements ServicioPersistenciaItems
{
    @Autowired
    @Qualifier("itemHibernateDao")
    private ItemHibernateDao itemHibernateDao;
    private Log log = LogFactory.getLog(ServicioPersistenciaItemsImpl.class);    
    [B]public ServicioPersistenciaItemsImpl()[/B]
    {
        log.info("Constructor SIN tipo ServicioPersistenciaItemsImpl...");
    }
some methods, getters and setters...
}

и конец, файл реализации ServicioApuntesContablesImpl, без зависимостей

короче говоря, проблема возникает, когда Spring пытается создать экземпляр файла реализации конечной точки storeService и не понимает его, потому что у меня нет типизированного конструктора ни в одном из файлов, геттеров и сеттеров, на которые я имею право, и, кроме того, используется любая зависимостьдруг другу.Может кто-нибудь помочь мне и объяснить, что происходит?большое спасибо

PD Я не написал код для проблем с читабельностью, и я легко достигаю предельных символов, если кому-то нужно смотреть, дайте мне знать.

1 Ответ

2 голосов
/ 30 апреля 2012

Хорошо, я уже решил свою проблему.Внутри файла endpoints.xml объявленные мои ws с идентификатором и идентификатором уже объявили ws-файл реализации с аннотацией @Service, так что исключение теперь мне ясно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...