2012-03-29 3 views
0

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

это 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> 

это beans.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 
} 

Как вы можете видеть, эта услугу inyected упорного сервиса под названием 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 имеет другой dependencie, 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, без зависимостей

package com.aironman.core.service; 
[B]@Service("servicioApuntes") 
public class ServicioApuntesContablesImpl implements ServicioApuntesContables[/B]{ 

    private Log log = LogFactory.getLog(ServicioApuntesContablesImpl.class); 
    private static ConcurrentHashMap <ClaveApunteContable,ApunteContable> mapaApuntesContables 
         = new ConcurrentHashMap <ClaveApunteContable,ApunteContable>(); 

    //TODO al final tendre que persistir los apuntes contables, por ahora los mantendre en memoria... 
    [B]public ServicioApuntesContablesImpl()[/B] 
    {} 
    some methods 
} 

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

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

ответ

2

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

Смежные вопросы