Spring boot Spring Boot@ComponentScan找到候选组件类,但不注入@Configuration bean
我有Spring boot Spring Boot@ComponentScan找到候选组件类,但不注入@Configuration bean,spring-boot,Spring Boot,我有@SpringBootApplication和@ComponentScan({“myPackage”}),在myPackage中,我有一个用@Configuration或@Component注释的类。当我启动spring boot应用程序时,日志显示: DEBUG [main] org.sprin.conte.annot.ClassPathScanningCandidateComponentProvider 437 scanCandidateComponents: Identified ca
@SpringBootApplication
和@ComponentScan({“myPackage”})
,在myPackage
中,我有一个用@Configuration
或@Component
注释的类。当我启动spring boot应用程序时,日志显示:
DEBUG [main] org.sprin.conte.annot.ClassPathScanningCandidateComponentProvider 437 scanCandidateComponents: Identified candidate component class: file [C:\Web\project\bin\main\myPackage\Config.class]
但是没有任何东西将类或其bean注入到应用程序中
它看起来与
代码
在myPackage.Client中
package myPackage;
import java.util.UUID;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import org.apache.logging.log4j.Logger;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.logging.log4j.LogManager;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.data.gemfire.cache.config.EnableGemfireCaching;
import org.springframework.data.gemfire.config.annotation.ClientCacheApplication;
import org.springframework.data.gemfire.config.annotation.EnableClusterDefinedRegions;
import org.springframework.data.gemfire.config.annotation.EnablePdx;
import org.springframework.data.gemfire.config.annotation.EnablePool;
import org.springframework.data.gemfire.config.annotation.EnablePool.Locator;
import org.springframework.data.gemfire.config.annotation.EnableStatistics;
import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession;
@ClientCacheApplication(name = "Web", logLevel = "debug")
@EnablePool(name = "webPool", subscriptionEnabled = true)
@EnableClusterDefinedRegions(clientRegionShortcut=ClientRegionShortcut.CACHING_PROXY)
@EnablePdx
@EnableStatistics
@EnableGemFireHttpSession(poolName = "webPool")
@EnableGemfireCaching
// @EnableWebFlux
public class Client {
private static final Logger log = LogManager.getLogger(Client.class);
@Resource
private Region<String, String> myAdmin;
@PreDestroy
public void onDestroy() throws Exception {
log.info("onDestroy");
String guid = UUID.randomUUID().toString().substring(0, 8).toUpperCase();
myAdmin.put(guid, "Web Shutdown");
log.traceExit();
}
@Bean
ApplicationRunner StartedUp(){
log.traceEntry("StartedUp");
return args -> {
String guid = UUID.randomUUID().toString().substring(0, 8).toUpperCase();
myAdmin.put(guid, "Web Started");
log.traceExit();
};
}
// Required to resolve property placeholders in Spring @Value annotations.
@Bean
static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
log.traceEntry("propertyPlaceholderConfigurer");
return new PropertySourcesPlaceholderConfigurer();
}
}
package-myPackage;
导入java.util.UUID;
导入javax.annotation.PreDestroy;
导入javax.annotation.Resource;
导入org.apache.logging.log4j.Logger;
导入org.apache.geode.cache.Region;
导入org.apache.geode.cache.client.ClientRegionShortcut;
导入org.apache.logging.log4j.LogManager;
导入org.springframework.boot.ApplicationRunner;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.support.propertysourcesplaceplaceconfigurer;
导入org.springframework.data.gemfire.cache.config.EnableGemfireCaching;
导入org.springframework.data.gemfire.config.annotation.ClientCacheApplication;
导入org.springframework.data.gemfire.config.annotation.EnableClusterDefinedRegions;
导入org.springframework.data.gemfire.config.annotation.EnablePdx;
导入org.springframework.data.gemfire.config.annotation.EnablePool;
导入org.springframework.data.gemfire.config.annotation.EnablePool.Locator;
导入org.springframework.data.gemfire.config.annotation.EnableStatistics;
导入org.springframework.session.data.gemfire.config.annotation.web.http.enablegmfirehttpsession;
@ClientCacheApplication(name=“Web”,logLevel=“debug”)
@启用池(name=“webPool”,subscriptionEnabled=true)
@EnableClusterDefinedRegions(clientRegionShortcut=clientRegionShortcut.CACHING_PROXY)
@使能PDX
@使能统计
@EnableGemFireHttpSession(poolName=“webPool”)
@启用FireCaching
//@EnableWebFlux
公共类客户端{
私有静态最终记录器log=LogManager.getLogger(Client.class);
@资源
私人区域管理;
@发情前期
public void ondestory()引发异常{
日志信息(“onDestroy”);
字符串guid=UUID.randomUUID().toString().substring(0,8).toUpperCase();
myAdmin.put(guid,“Web关闭”);
log.traceExit();
}
@豆子
ApplicationRunner已启动(){
日志跟踪(“启动”);
返回args->{
字符串guid=UUID.randomUUID().toString().substring(0,8).toUpperCase();
myAdmin.put(guid,“Web启动”);
log.traceExit();
};
}
//需要解析Spring@Value注释中的属性占位符。
@豆子
静态属性资源占位符配置器属性PlaceHolderConfigure(){
日志跟踪(“PropertyPlaceHolderConfigure”);
返回新属性资源占位符配置器();
}
}
在myPackage.Config中
package myPackage;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.client.ClientRegionFactoryBean;
@Configuration
public class Config {
private static final Logger log = LogManager.getLogger(Config.class);
@Bean("myRegion")
public Region<String, Object> myRegion(GemFireCache cache) {
log.traceEntry();
Region<String, Object> r = cache.getRegion("myRegion");
r.setUserAttribute(ClientRegionShortcut.CACHING_PROXY);
return r;
}
}
package-myPackage;
导入org.apache.geode.cache.GemFireCache;
导入org.apache.geode.cache.Region;
导入org.apache.geode.cache.client.ClientRegionShortcut;
导入org.apache.logging.log4j.LogManager;
导入org.apache.logging.log4j.Logger;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.data.gemfire.client.ClientRegionFactoryBean;
@配置
公共类配置{
私有静态最终记录器log=LogManager.getLogger(Config.class);
@豆(“我的区域”)
公共区域myRegion(GemFireCache缓存){
log.traceEntry();
Region r=cache.getRegion(“myRegion”);
r、 setUserAttribute(ClientRegionShortcut.CACHING_PROXY);
返回r;
}
}
在Config
类中定义您正在使用Region
作为返回类型的bean。其中,在您的客户机
类中定义了区域
。这里很明显是类型不匹配,因此bean不会加载。您能提供相关的代码吗?您怎么说它不注入@Configuration。此注释用于配置其他bean?请用更多信息展开问题。不,这是另一个用于放置和获取管理员消息的区域“myAdmin”。我希望将另一个“myRegion”区域设置为bean,以便以后订阅和取消订阅感兴趣的事件……您能否在启用调试的情况下运行spring应用程序,查看自动配置报告中的内容,并检查spring是否将myRegion
映射到region
?在这里发布报告也会有所帮助。
package myPackage;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.client.ClientRegionFactoryBean;
@Configuration
public class Config {
private static final Logger log = LogManager.getLogger(Config.class);
@Bean("myRegion")
public Region<String, Object> myRegion(GemFireCache cache) {
log.traceEntry();
Region<String, Object> r = cache.getRegion("myRegion");
r.setUserAttribute(ClientRegionShortcut.CACHING_PROXY);
return r;
}
}