실제 메일 전송을 수행하는 JavaMail 대신에 테스트에서 사용할 JavaMail 과 같은 인터페이스를 갖는 오브젝트를 만들어 사용
→ 마치 DataSource 인터페이스를 이용해 DB 연결을 가져오게 해서 테스트 중 실제 운영중인 DB 서버 대신 테스트 용으로 가벼운 DB 사용하기
JavaMail 의 핵심 API 에는 DataSource 처럼 인터페이스로 만들어져서 구현을 바꿀 수 있는 게 없다.
Session s = Session.getInstance(props, null);
스프링이 제공하는 서비스 추상화 기능
스프링은 JavaMail 에 대한 추상화의 핵심 인터페이스를 제공한다.
public interface MailSender{
void send(SimpleMailMessage simpleMessage) throws MailException;
void send(SimpleMailMessage[] simpleMessages) throws MailException;
}