2017-09-21 7 views
1

Iは、以下のインターフェースを有する:その2 imlementationでクラスは、単一のBeanを必要とするが、2が見つかりました:

public interface MailSender { 
    void sender(String to, String subject,String body); 
} 

を:

public class SmtpkMailSender implements MailSender { 

    static Log log=LogFactory.getLog(MailSender.class); 

    public void sender(String to, String subject,String body){ 
     log.info("SMTP To: "+to); 
     log.info("SMTP Subjecy: "+subject); 
     log.info("SMTP body: "+body); 
    } 

} 

及び第二つある:

@Primary 
public class MockMailSender implements MailSender { 

    static Log log=LogFactory.getLog(MailSender.class); 

    public void sender(String to, String subject,String body){ 
     log.info("To: "+to); 
     log.info("Subject: "+subject); 
     log.info("body: "+body); 
    } 

} 

次のようなコントローラクラスに依存性注入を使用しました:

01終わり
@RestController 
public class MailController { 

    @Autowired 
    private MailSender smtpkMailSender; 

    @RequestMapping("/send") 
    public String send(){ 
     smtpkMailSender.sender("Person", "Important", "Take Care"); 
     return "mail is sent"; 
    } 
} 

私は私の豆を含む構成クラスがあります。

@Configuration 
public class MailConfig { 

    @Bean 
    public SmtpkMailSender getSmtpkMailSender(){ 
     return new SmtpkMailSender(); 
    } 

    @Bean 
    public MockMailSender getMockMailSender(){ 
     return new MockMailSender(); 
    } 

} 

残念ながら、私は自分のアプリケーションを実行すると、それはして文句を言う:見ての通り、私は持っているが、

をプライマリとしてMockMailSenderを指定しました。春はまだ文句を言わず、それを識別できません。

+0

あなたは注入する予定豆綴るために修飾子を追加します。 – duffymo

答えて

0

あなたはJavaの設定を使用しているので@Primary注釈ではなく、クラスに設定する方法をマークする必要があります実装のどの特定の種類を指定するためにあなたが@Qualifierアノテーションを使用することができます

@Configuration 
public class MailConfig { 
    @Bean 
    public SmtpkMailSender getSmtpkMailSender(){ 
     return new SmtpkMailSender(); 
    } 

    @Bean 
    @Primary 
    public MockMailSender getMockMailSender(){ 
     return new MockMailSender(); 
    } 
} 
1

、あなたはautowireしたいです。

@RestController 
public class MailController { 

    @Autowired 
    @Qualifier("smtpkMailSender") 
    private MailSender smtpkMailSender; 

    @RequestMapping("/send") 
    public String send(){ 
     smtpkMailSender.sender("Person", "Important", "Take Care"); 
     return "mail is sent"; 
    } 

}

関連する問題