2

Jodd フレームワークは、他のフレームワークによって作成されたオブジェクトのプチビーン参照を挿入するメカニズムを提供しますか?

Below are scenarios
- Domain/Service objects are created by Spring Framework
- Domain objects created are by ORM Frameworks
- These objects need to be injected with Repository/DAO object (Singleton objects registered as PetiteBean via AutomagicPetiteConfigurator)


Below is sample code, after petite container is shutdown, initMethod() is invoked when pc.getBean(Greetings.class).message(null) is invoked and destroyMethod() is not invoked, can you please point me what I am doing wrong?

@PetiteBean("greetings")
public class EnglishGreetings implements Greetings {

    @Override
    public String message(String message) {

        if (message == null) {
            return "defaultMessage";
        }
        return message;
    }

    @PetiteInitMethod
    public void initMethod() {
        System.out.println("Entered initMethod");
    }

    @PetiteDestroyMethod
    public void destroyMethod() {
        System.out.println("Entered destroyMethod");
    }
}

public class GreetingRunner {
    final static Logger logger = LoggerFactory.getLogger(GreetingRunner.class);

    @PetiteInject
    public Greetings greetings;

    public static void main(String s[]) {

        jodd.log.LoggerFactory.setLoggerFactory(new Slf4jLoggerFactory());

        PetiteContainer pc = new PetiteContainer();
        AutomagicPetiteConfigurator configurator = new AutomagicPetiteConfigurator();
        configurator.setIncludedEntries("com.rans.*");
        configurator.configure(pc);
        pc.shutdown();
        System.out.println(pc.getBean(Greetings.class).message(null));
    }
}
4

1 に答える 1

0

Destroy メソッドは、Petite の遅延側面のために呼び出されていません。Bean が使用されていない場合、destroy メソッドは呼び出されません。同じことが init メソッドにも当てはまります。bean が使用されていない場合、Petite simple はそれを無視します。

質問に戻ります。

Jodd フレームワークは、他のフレームワークによって作成されたオブジェクトのプチビーン参照を挿入するメカニズムを提供しますか?

技術的には、はい - 上書きする場合:) を参照してくださいPetiteProxettaContainergetBeanサードパーティのコンテナーをオーバーライドして使用して、Bean をフェッチすることができます。実際にはcreateBeanDefinitionForRegistration、Bean を別のコンテナーに登録するメソッドをオーバーライドすることができます。正直に言うと、これをもっと明白にするかもしれません:)

(返信が遅くなり申し訳ありません)

于 2016-05-02T15:47:25.783 に答える