java - NoSuchBeanDefinitionException: no hay ningún bean con nombre, authService, disponible

CorePress2023-11-30  1

Cuando intento utilizar la API, aparece este error:

"org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'authService' available". 

¿Cómo hago para que la aplicación encuentre el servicio de autenticación? Recibí un error similar antes, que intenté solucionar agregando todos los paquetes que ves a continuación en la clase Principal.

La clase principal:

package com.lvwangbeta.poplar.api;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import com.lvwangbeta.poplar.action.PoplarActionServiceApplication;
import com.lvwangbeta.poplar.feed.PoplarFeedServiceApplication;
import com.lvwangbeta.poplar.tag.PoplarTagServiceApplication;
import com.lvwangbeta.poplar.user.PoplarUserServiceApplication;

import java.util.List;

@SpringBootApplication(scanBasePackages= {"com.lvwangbeta.poplar.common","com.lvwangbeta.poplar.common.intr","com.lvwangbeta.poplar.action",
        "com.lvwangbeta.poplar.api.service",
        "com.lvwangbeta.poplar.feed","com.lvwangbeta.poplar.tag",
        "com.lvwangbeta.poplar.user", "com.lvwangbeta.poplar.api"})
//@ComponentScan({"com.lvwangbeta.poplar.common","com.lvwangbeta.poplar.user","com.lvwangbeta.poplar.feed.dao", "com.lvwangbeta.poplar.api"})
@ComponentScan({"com.lvwangbeta.poplar.action.dao.impl","com.lvwangbeta.poplar.feed.dao.impl"})
@MapperScan({"com.lvwangbeta.poplar.action.dao","com.lvwangbeta.poplar.feed.dao","com.lvwangbeta.poplar.tag.dao"})
public class PoplarApiApplication extends WebMvcConfigurerAdapter {

    public static void main(String[] args) {
        //Object[] sources = {PoplarApiApplication.class,PoplarTagServiceApplication.class};
        //SpringApplication.run(sources, args);
        System.out.println("Started");
        SpringApplication.run(PoplarApiApplication.class, args);
        //SpringApplication.run(PoplarTagServiceApplication.class, args);//I hope this works
        //SpringApplication.run(PoplarActionServiceApplication.class, args);
        //SpringApplication.run(PoplarFeedServiceApplication.class, args);
        //SpringApplication.run(PoplarUserServiceApplication.class, args);

    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
        super.addArgumentResolvers(argumentResolvers);
        argumentResolvers.add(new RequestAttributeArgumentResolver());
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
        registry.addInterceptor(new APIAccessAuthRequiredInterceptor())
                .addPathPatterns("/api/v1/**")
                .excludePathPatterns("/api/v1/user/login/**")
                .excludePathPatterns("/api/v1/user/check/email/*")
                .excludePathPatterns("/api/v1/user/register/**")
                .excludePathPatterns("/api/v1/feed/of/user/**");
    }
}

La clase AuthService:

package com.lvwangbeta.poplar.api.service;

import com.lvwangbeta.poplar.common.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service("authService")
public class AuthService {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @Resource(name="redisTemplate")
    private HashOperations<String, String, Object> mapOps;

    public User getUserByToken(String token) {
        return (User) mapOps.get("tokens:", token);
    }
}

¿Qué me estoy perdiendo? No se registra a pesar de que el enlace de la API está ahí. Estoy intentando combinar muchos microservicios en uno, por lo que hay muchos paquetes.



------------------------

incluir com.lvwangbeta.poplar.api.service en @ComponentScan

Así:

@ComponentScan({"com.lvwangbeta.poplar.action.dao.impl","com.lvwangbeta.poplar.feed.dao.impl", "com.lvwangbeta.poplar.api.service"})

Sugerirgestion :Para aplicaciones simples, evite configurar la forma anterior.

Mantenga la estructura de su proyecto como se explica en esta referencia y @SpringBootApplication es suficiente.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using-boot-locating-the-main-class

4
  • Eso pareció solucionarlo, pero solo recibo el error 404. Mi respuesta es "{"marca de tiempo":"2020-06-07T06:18:40.586+0000","status":404,"error":"No encontrado","mensaje":"No hay mensaje disponible","ruta":"/api/v1/user/check/email/[email protected]"}". ¿Sabes a qué se debe esto? -Adivina quién321 7 de junio de 2020 a las 6:24
  • /api/v1/user/check/email/{email}: ¿tienes esta API? Hemant 7 de junio de 2020 a las 6:26
  • Agregué algunos paquetes más al escaneo de componentes y también agregué la clase de paquete base del controlador de usuario y eso pareció solucionar el problema. ¡Gracias! -Adivina quién321 7 de junio de 2020 a las 6:51
  • respuesta actualizada para conocer el enfoque recomendado y consulte este artículo para comprender el escaneo de componentes: dzone.com/articles/spring-spring-boot-and-component-scan Hemant junio7, 2020 a las 6:58
Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare