0

を使用している、使用してSpringいないJSF、使用してajaxいるなど。

サービスがあります

@Service(value="mailService")
public class MailService{
//an autowired dao, etc here
}

私は Bean を持っています。この Bean に 1 つの MailService が必要です。

//Here i have tried so far individually @Service, @Component, @Controller
public class EmailAgent{

private MailService mailService;



    public MailService getMailService() {
        return mailService;
    }

    @Autowired
    public void setMailService(MailService mailService) {
        this.mailService = mailService;
    }

}

私はapplicationContext.xmlに以下を持っています

<context:component-scan base-package="mypack.containing.emailagent.path.too" />
<context:annotation-config/>

1 つの EmailAgent メソッドを呼び出すと、EmailAgent の mailService が null になります。

アドバイスをお願いしたいのですが、サーバーの起動中に「mailService を自動配線できませんでした」などの例外が発生しない理由を理解したいと思います。少し前に使用してJSFいて、サーバーの起動中にそのような警告を見ることができました。

問題が特定され、解決方法

私は ea を生成していましEmailAgent ea=new EmailAgent(); た それは私の愚かさですが、次のようなコンテキストを取得しようとすると:

ClassPathXmlApplicationContext cont=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
                  mailService=()cont.getBean("mailService");

一意でないキャッシュなどの問題、もう 1 つのコンテキストの生成に関する問題に直面しています。では、コンテキストを「取得」して、コンテキストをもう 1 つ「生成」しないようにするにはどうすればよいでしょうか。

解決した

追加した

<bean class="email.EmailService" id="emailService"> 
  <dwr:remote javascript="emailService"> 
    <dwr:include method="sendMail"/>
    <dwr:include method="readAllMails"/>
    <dwr:include method="removeMailsById"/> 
  </dwr:remote> 
</bean> 

dwr.xml に追加し、emailService から dwr に関するアノテーションを削除しました。

私が見ることができるように、 dwr s と spring s の注釈は本当に競合していました。

問題を検出するためのアイデアを提供してくれた @NimChimpsky に感謝します。

4

1 に答える 1

1

統合テストでない限り、別のコンテキストは必要ありません。

emailagent はどこで使用されていますか? そこに普通に注入するだけ。メールサービスと同じように。

コンポーネントまたはサービスで注釈を付けることができます。どちらも適切です。

于 2012-10-10T12:13:30.820 に答える