亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

@Component Scan 不適用于 Spring Boot 中的 @Componen

@Component Scan 不適用于 Spring Boot 中的 @Componen

慕神8447489 2022-06-15 10:46:30
我以這種方式在spring boot應用程序中有一個通用的jar文件,package com.acc.api;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;@SpringBootApplication@ComponentScan(basePackages = {"com.acc.api","service"})public class ApicoreApplication {    public static void main(String[] args) {        ApplicationContext applicationContext = SpringApplication.run(ApicoreApplication.class, args);        for (String name: applicationContext.getBeanDefinitionNames()) {            System.out.println(name);        }    }}其中的組件是,package com.acc.api.core.utils;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;@Componentpublic class AccUtil {    @Autowired    private WebServiceEngine engine;}其中 WebServiceEngine 是我調用的第三方 api。我的 pom 條目是這樣的,<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.2.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.acc.api</groupId>    <artifactId>apicore</artifactId>    <version>0.0.1</version>    <name>apicore</name>    <description>apicore</description>    <properties>        <java.version>1.8</java.version>    </properties>直到這很好,項目正在編譯,jar 正在目標文件夾中創建。
查看完整描述

3 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

您在com.acc.api.core.utils.AccUtil課堂上兩次導入StatusController課程:


import com.acc.api.core.utils.AccUtil;


@Import({AccUtil.class})

刪除其中一個,然后重試。


查看完整回答
反對 回復 2022-06-15
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

Spring boot 僅掃描作為依賴項的包/jar。無論哪種方式,編譯時范圍或運行時范圍(提供)。因此,如果您嘗試掃描不依賴于編譯時(默認范圍)的 jar,例如,因為您集成在一個接口上,您仍然依賴于它運行時,因此組件可以找到要注入的實現類。如果您連接例如@RestControllers,則應用程序可能在另一個包/jar 中,然后是您的控制器。盡管您沒有應用程序包對控制器的編譯時依賴性,但您仍然需要加載 jar 運行時。否則,控制器將不會被掃描并發現運行時。


<dependency>

        <groupId>...</groupId>

        <artifactId>...</artifactId>

        <version></version>

        <scope>provided</scope>

</dependency>

<dependency>

    <groupId>...</groupId>

    <artifactId>...</artifactId>

    <version></version>

    <scope>compile</scope>

</dependency>


查看完整回答
反對 回復 2022-06-15
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

使用 Spring Boot 時,spring-boot-maven-plugin會重新打包并重組生成的 jar 文件。此 jar 文件不可用作其他應用程序的依賴項。相反,您需要指示spring-boot-maven-plugin重新打包 jar 并保留原始工件(并將兩者都發布到您的 maven 存儲庫)。

Spring Boot 參考指南有一個關于如何做到這一點的特殊部分。

如果您的 jar 只是一個依賴項并且本身不能運行/可執行,那么只需刪除spring-boot-maven-plugin并生成一個常規 jar。


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號