jodd无法注入两个bean

jodd无法注入两个bean,jodd,Jodd,我有一个DAO和一个服务类,每个类实现一个接口: public interface TemperatureDao extends GenericDAO<TemperatureLog> { public abstract List<TemperatureLog> getLastHourTemperatures(); } @PetiteBean(value="temperatureDao",wiring=WiringMode.AUTOWIRE) public cl

我有一个DAO和一个服务类,每个类实现一个接口:

public interface TemperatureDao extends GenericDAO<TemperatureLog> {

    public abstract List<TemperatureLog> getLastHourTemperatures();
}

@PetiteBean(value="temperatureDao",wiring=WiringMode.AUTOWIRE)
public class TemperatureDaoImpl extends GenericAbstractDAO<TemperatureLog> implements TemperatureDao {

    @Override
    public List<TemperatureLog> getLastHourTemperatures(){                  
        //do stuff here
        return temps;
    }
}
日志在我看来很好:

127 [DEBUG] j.p.PetiteBeans.registerPetiteBean:244 - Registering bean: temperatureDao of type: TemperatureDaoImpl in: SingletonScope using wiring mode: AUTOWIRE
128 [DEBUG] j.p.ProxettaBuilder.process:187 - processing: ro/videanuadrian/smartHome/dao/impl/TemperatureDaoImpl
128 [DEBUG] j.p.ProxettaBuilder.define:228 - proxy not applied ro.videanuadrian.smartHome.dao.impl.TemperatureDaoImpl
134 [DEBUG] j.p.PetiteBeans.registerPetiteBean:244 - Registering bean: temperatureService of type: TemperatureServiceImpl in: SingletonScope using wiring mode: AUTOWIRE
135 [DEBUG] j.p.ProxettaBuilder.process:187 - processing: ro/videanuadrian/smartHome/services/impl/TemperatureServiceImpl
139 [DEBUG] j.p.ProxettaBuilder.define:243 - proxy created ro.videanuadrian.smartHome.services.impl.TemperatureServiceImpl

那么,你知道我在这里遗漏了什么吗?

解决了,问题是
temperatureDao
被声明为
private
。我已经将其更改为默认值,现在它可以工作了。

我正在发布新的答案,以更好地解释正在发生的事情

这里发生的事情是,您在
TemperatureServiceImpl
上创建了代理,并将其注册为
PetiteBean
,这是完全正确的:)因此,Petite容器获取proxified类,它是您的服务实现的子类

当Petite进行连接时,它正在扫描代理类,因此,它无法在超类中看到带注释的私有字段(这是原始的
TemperatureServiceImpl

您可以通过两种方式解决此问题:

  • 通过删除
    private
    修饰符(并使用其他任何东西),容器将“看到”子类中的字段,或者

  • 只需使用
    @PetiteInject
    注释例如
    getTemperatureDao()
    方法,并保持字段不变


  • 希望这能解释发生了什么。我将在即将发布的3.6版本中尝试解决这个问题。

    嗨,阿德里安!我正试图用最新的代码库重现这一点,它仍在使用
    private
    (应该是:)。此外,如果使用
    AUTOWIRE
    ,则不需要在字段上使用
    @PetiteInject
    ,因为所有内容都将自动连接。顺便说一句,您可以将
    AUTOWIRE
    设置为默认布线模式,这样您就不必一直编写它。无论如何,如果你有时间,请如我所愿提供帮助。顺便问一下,你确定
    temperatureDao
    temperatureservicepimpl
    中吗?从描述的行为来看,这个字段似乎是在子类中声明的?
    return temperatureDao.getLastHourTemperatures();  
    
    127 [DEBUG] j.p.PetiteBeans.registerPetiteBean:244 - Registering bean: temperatureDao of type: TemperatureDaoImpl in: SingletonScope using wiring mode: AUTOWIRE
    128 [DEBUG] j.p.ProxettaBuilder.process:187 - processing: ro/videanuadrian/smartHome/dao/impl/TemperatureDaoImpl
    128 [DEBUG] j.p.ProxettaBuilder.define:228 - proxy not applied ro.videanuadrian.smartHome.dao.impl.TemperatureDaoImpl
    134 [DEBUG] j.p.PetiteBeans.registerPetiteBean:244 - Registering bean: temperatureService of type: TemperatureServiceImpl in: SingletonScope using wiring mode: AUTOWIRE
    135 [DEBUG] j.p.ProxettaBuilder.process:187 - processing: ro/videanuadrian/smartHome/services/impl/TemperatureServiceImpl
    139 [DEBUG] j.p.ProxettaBuilder.define:243 - proxy created ro.videanuadrian.smartHome.services.impl.TemperatureServiceImpl