Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Usando o @Service de outro projeto com @Autowired

Olá!

Criamos a chamda do @Service enviadorDeEmails mas instanciamos na chamada do nosso controller. Tentei usar ele como @Autowired em um Controller e não foi possível. Mas instanciando new EnviadorDeEmail().send() ele funciona normalmente!

Isso é possível?

5 respostas

Deveria receber via @Autowired sim.. ele está num pacote configruado para ser scaneado pela sua aplicação?

Tentei da seguinte maneira:

@ComponentScan(basePackageClasses={SendMail.class})
@SpringBootApplication
public class TicketymeApplication{

E Também da seguinte maneira:

@SpringBootApplication(scanBasePackageClasses={SendMail.class})
public class TicketymeApplication extends WebMvcConfigurerAdapter

Ambos geram

2017-01-12 07:58:26.871  INFO 4745 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-01-12 07:58:26.884  INFO 4745 --- [  restartedMain] b.c.r.ticketyme.TicketymeApplication     : Started TicketymeApplication in 3.88 seconds (JVM running for 4.448)
2017-01-12 07:58:34.357  INFO 4745 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-01-12 07:58:34.357  INFO 4745 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-01-12 07:58:34.370  INFO 4745 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 13 ms

Oi Roberto, tudo bem? Já que está usando o Spring Boot recomendo que verifique em qual pacote está a sua classe SendMail, pois, para que o Spring Boot consiga injetá-la sem a necessidade de usar @ComponentScan, a classe precisa estar no mesmo pacote ou sub pacote que está a TicketymeApplication. Por exemplo, se a application estiver em:

br.com.ticketyme

o SenderMail deve ficar em:

br.com.ticketyme

Ou qualquer pacote de nível abaixo, como por exemplo:

br.com.ticketyme.service

Veja se dessa forma funciona.

Abraços.

Realmente não estou usando o mesmo pacote, afinal os projetos são diferentes, contudo coloquei o @ComponentScan e mesmo assim gerou erro na inicilização.

solução!

Galera, O erro estava no seguinte, quando eu mapeava eu só colocava a classe que eu queria (o SendMail) e o @ComponentScan excluia o pacote atual, logo o mapeamento o meu @Controller etc deixava de existir.

Resolução:

@ComponentScan(basePackageClasses={SendMail.class,SiteController.class})
@SpringBootApplication//(scanBasePackageClasses={SendMail.class,SiteController.class})
public class TicketymeApplication extends WebMvcConfigurerAdapter {

Testei com @ComponentScan e scanBasePackageClasses ambos dão certo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software