qualifying beans in SpringBoot

Viewed 80

I have a SpringBoot app. with this class that I use to fake a mail sender in my localhost enviroment

@Service
@Profile("local")
@Qualifier("emailSender")
public class FackeEmailSender {
private static final Logger logger = LoggerFactory.getLogger(FackeEmailSender.class);

and this other

@Service
@Profile("prod")
public class EmailSender {
    private static final Logger logger = LoggerFactory.getLogger(EmailSender.class);

nevertheless when I start the app. with this profile:

spring.profiles.active=local

I got this error

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method setEmailSender in com.tdk.jms.EmailQueueListener required a bean of type 'com.tdk.services.EmailSender' that could not be found.


Action:

Consider defining a bean of type 'com.tdk.services.EmailSender' in your configuration.

and

@Component
class EmailQueueListener implements QueueListener {


    private EmailSender emailSender;


    @Autowired
    void setEmailSender(EmailSender emailSender) {
        this.emailSender = emailSender;
    }
..
}
2 Answers

Your EmailSender & FackeEmailSender are not implementing any interface. you can extract EmailSender Interface and then implement that interface for both the beans

can you try using

@Autowired private EmailSender emailSender;

instead of using on setEmailSender

Related