[Javalist] Spring meghal ha interfeszt implementalok (?)

Gábor Garami gabor.garami at hron.me
2012. Aug. 19., V, 23:40:47 CEST


Na, ilyet meg nem pipaltam. Elvben minden standard javas, sot,
allitolag ajanlas az, ami nekem nem megy... meg ilyet...

Szoval, adott ket rovid szosszenet:

public interface IFacade<T extends IEntity> {

    //@Transactional
    public void create(T entity);

    //@Transactional
    public void update(T entity);

    //@Transactional
    public void remove(T entity);

    public T find(Object id);

    public List<T> findAll();

    public List<T> findRange(int[] range);

    public int count();
}

public abstract class AbstractFacade<T extends IEntity> implements IFacade<T> {

    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    /**
     * Stores new entity into the database
     * @param entity the new entity. Should <em>not</em> be persisted
     */

    @Transactional
    @Override
    public void create(T entity) {
        if(!getEntityManager().contains(entity)) {
            getEntityManager().persist(entity);
            getEntityManager().flush();
        }

    }

    /**
     * Updates entity in the database
     * @param entity the subject entity. Must <em>be</em> persisted
     */

    @Override
    @Transactional
    public void update(T entity) {
        getEntityManager().merge(entity);
        getEntityManager().flush();
    }
    /**
     * Removes entity from the database
     * @param entity the subject entity. Must <em>be</em> persisted
     */

    @Override
    @Transactional
    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
        getEntityManager().flush();
    }

    // Es igy tovabb, az osszes metodushoz van megfelelo implementacio
}

A problema a kovetkezo. Ha az AbstractFacade fenti definiciojat hasznalom:

Caused by:
org.springframework.beans.factory.BeanCreationException: Could not
autowire field: private me.hron.springblog.dao.ArticleFacade
me.hron.springblog.controller.ArticleContoroller.articleDao; nested
exception is java.lang.IllegalArgumentException: Can not set
me.hron.springblog.dao.ArticleFacade field
me.hron.springblog.controller.ArticleContoroller.articleDao to
$Proxy27
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
        .... and so on...

Ha viszont nem implementalom az IFacade interfeszt a fenti modon
(vagyis kiesik az implements IFacade<T>) akkor gyonyoruen fut a progi.

A tesztek mindket esetben lefutnak, tehat magad a kesz, implementalt
dao objektumot nem befolyasolja az IFacade lete vagy nem lete, egyedul
a kontrollerekbe torteno injekciozas, az, ami megdoglik ilyenkor.

Nem tudom, hogy ez-e a baj, de olyan erzesem van, mintha az IFacade
implementaciojanak tenye tul bonyolult lenne a kis egyszeru szoszke
lelkenek, es nem tudna feloldani, hogy mi a pocsot akarok en ottan.
Pedig hat azert ez annyira nem egy ertelmetlen dolog.

Az app mukodik enelkul a szerkezet nelkul is, szoval en biztos nem
fogok a konyhakes utan nyulkalni szivbokdoses celjaval, ha ez igy nem
fog osszejonni, de furdalja a lelkemet, hogy ugyan mi kivetnivalot
talal ebben? Esetleg en rontok el valamit, es - noch dazu - valami
nonszensz dolgot eroltetek?


Garami Gábor
E-mail: gabor.garami at hron.me
Tel: +36 20 235 9621
MSN: hrgy at vipmail.hu
Skype: hron84


További információk a(z) Javalist levelezőlistáról