【问题标题】:Dependency Injection : Could not initialize class org.springframework.beans.CachedIntrospectionResults依赖注入:无法初始化类 org.springframework.beans.CachedIntrospectionResults
【发布时间】:2021-06-16 18:15:16
【问题描述】:

我正在开发一个使用 Spring 框架的 Java 库。 在这个库上,我创建了一个充当应用程序管理器的类。它使用单例设计模式。

这个类对外部 HTTP 调用使用依赖注入。

public class SharePointManager {
    private static SharePointManager instance = null;
    private static IAuthenticationResult iAuthenticationResult;
    private static String token;
    private static SiteService siteService;

    public static SharePointManager getInstance() {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(AppConfig.class);
        SharePointManager.dummyService = context.getBean(DummyService.class);
        SharePointManager.siteService = context.getBean(SiteService.class);
        if(instance == null) {
            instance = new SharePointManager();
        }
        return instance;
    }

    private SharePointManager() {
    }

    public SharePointSiteResponse getAllSites(SharePointCredentialRequest creds) throws Exception {
        if( iAuthenticationResult != null && iAuthenticationResult.accessToken() != null ) {
            token = iAuthenticationResult.accessToken();
            if (Utils.checkToken(iAuthenticationResult.accessToken())) {
                token = Utils.getToken(creds).accessToken();
            }
        } else {
            token = Utils.getToken(creds).accessToken();
        }
        token = iAuthenticationResult.accessToken();
        return siteService.getAllSites(creds, token);
    }
}

在我的服务层中,我还想使用 HttpRequest 类进行依赖注入:

@Service
public class SiteServiceImpl implements SiteService {
    private final HttpRequest httpRequest;

    public SiteServiceImpl(HttpRequest httpRequest) {
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(AppConfig.class);
        this.httpRequest = context.getBean(HttpRequest.class);
    }

    @Override
    public SharePointSiteResponse getAllSites(SharePointCredentialRequest credentialRequest, String token) throws Exception {
        if(Utils.checkToken(token))
            token = Utils.createToken(credentialRequest);

        URL url = new URL("https://graph.microsoft.com/v1.0/sites?search=*");
        return httpRequest.getAllSitesRequest(token, url);
    }
}

在我的 httpRequest 类中,我只是构建我的调用:

@Component
public class HttpRequest {
    private final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH").disableHtmlEscaping().create();

    public SharePointSiteResponse getAllSitesRequest(String token, URL url)
            throws IOException, RequestException {
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        return getSiteConnection(token, url, conn);
    }
    ....

我的 AppConfig 类只是在这里进行配置:

@Configuration
@ComponentScan(basePackages  = {"fr.dsidiff.sharepoint"})
public class AppConfig {
}

我收到一条错误消息:

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.springframework.beans.CachedIntrospectionResults
    at org.springframework.context.support.AbstractApplicationContext.resetCommonCaches(AbstractApplicationContext.java:969)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
    at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:93)
    at fr.dsidiff.sharepoint.SharePointManager.getInstance(SharePointManager.java:20)

【问题讨论】:

  • 你检查过这个stackoverflow.com/questions/24237276/… 吗?您正在使用什么依赖项?查看您的 pom.xml 或您用于依赖项的任何内容会很有帮助。另外,您不必使用@Autowired 吗?
  • 看来AnnotationConfigApplicationContext调用的bean不能同时使用AnnotationConfigApplicationContext调用内部bean。 Spring框架版本是最新的。

标签: java spring


【解决方案1】:

我尝试了两种解决方案来解决我的服务层问题:

@Service
public class SiteServiceImpl implements SiteService {
    private final HttpRequest httpRequest;

    @Autowired
    public SiteServiceImpl(HttpRequest httpRequest) {
        this.httpRequest = httpRequest;
    }
 ...

我也尝试了 javax @Inject 并且它有效 我没想到我可以使用 autowired 注入...

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 2018-01-15
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多