我创建了一个简单的单元测试,但IntelliJ错误地将其突出显示为红色。将其标记为错误
没有豆子?
如下所示,它通过了测试?那么必须是Autowired?
答案 0 :(得分:127)
使用$dbh->err
注释创建 Spring Boot 应用程序时遇到了同样的问题。根据{{3}},此注释代表@SpringBootApplication
,@Configuration
和@EnableAutoConfiguration
。
正如预期的那样,新的注释工作正常,我的应用程序运行顺利,但 Intellij 一直抱怨未实现的@ComponentScan
依赖项。我一改回使用@Autowire
,@Configuration
和@EnableAutoConfiguration
,错误就会停止。似乎 Intellij 14.0.3 (很可能,早期版本)尚未配置为识别@ComponentScan
注释。
现在,如果错误打扰你那么多,那么回到那三个单独的注释。否则,请忽略 Intellij ...您的依赖项解析已正确配置,因为您的测试通过了。
永远记住......
人永远比机器大。
答案 1 :(得分:41)
在存储库类上添加Spring注释@Repository
。
我知道它应该没有这个注释。但是如果你添加它,IntelliJ将不会显示错误。
@Repository
public interface YourRepository ...
...
如果您将Spring Data与扩展Repository
类一起使用,那将是冲突问题。然后你必须指出明确的pagkages。
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
接下来,您可以毫无错误地自动安装您的存储库。
@Autowired
YourRepository yourRepository;
这可能不是一个好的解决方案(我猜你试图两次登记repositorium)。但是为我工作并且不会显示错误。
也许在新版本的IntelliJ中可以修复:https://youtrack.jetbrains.com/issue/IDEA-137023
答案 2 :(得分:21)
答案 3 :(得分:14)
有时您需要指明@ComponentScan应扫描组件的位置。您可以将包作为此批注的参数传递,例如:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
但是,如前所述,@ SpringBootApplication注释取代了@ComponentScan,因此在这种情况下你必须这样做:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
至少在我的情况下,Intellij停止了抱怨。
答案 4 :(得分:12)
答案 5 :(得分:12)
我使用的是spring-boot 2.0和intellij 2018.1.1终极版,我遇到了同样的问题。
我通过在主应用程序类
中放置@EnableAutoConfiguration来解决@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
答案 6 :(得分:5)
在您的bean配置文件中放置from pprint import pprint
import random
rows = 3
cols = 3
virus = [0,0,0,0,0,1,2]
first_gen = [[random.choice(virus) for _ in range(rows)] for _ in range(cols)]
pprint (first_gen)
或@Component
似乎有效,例如:
@configuration
答案 7 :(得分:4)
如果您不想对代码进行任何更改,只是为了让您的IDE感到满意。我已经通过将所有组件添加到Spring facet来解决它。
答案 8 :(得分:4)
只要您的测试通过即可,请点击alt + enter
,将光标放在错误上,然后在第一项的子菜单中找到Disable Inspection
选择
答案 9 :(得分:2)
您需要做的是添加
title
中的 @ComponentScan("package/include/your/annotation/component")
。
由于我认为您的AppConfiguration.java
包比更深而不是注释组件(@ Service,@ Component ...)的包,
,例如AppConfiguraion.java
。
答案 10 :(得分:2)
我的申请中遇到了类似的问题。 当我添加注释不正确的高位消失时。
@ContextConfiguration(classes = {...})
答案 11 :(得分:2)
最后一条重要信息 - 添加ComponentScan
,以便应用知道需要连接的内容。这与此问题的情况无关。但是,如果根本没有执行@autowiring
,那么这可能是您的解决方案。
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
答案 12 :(得分:2)
答案 13 :(得分:2)
我在IntelliJ v.14中使用此注释隐藏此错误:
@SuppressWarnings("SpringJavaAutowiringInspection")
答案 14 :(得分:2)
在课程级别将@EnableAutoConfiguration
注释与@Component
一起使用。它将解决此问题。
例如:
@Component
@EnableAutoConfiguration
public class ItemDataInitializer {
@Autowired
private ItemReactiveRepository itemReactiveRepository;
@Autowired
private MongoOperations mongoOperations;
}
答案 15 :(得分:2)
我在Spring Boot应用程序中有类似的问题。该应用程序利用Feign(HTTP客户端从带注释的接口合成请求)。 Feign在接口SomeClient
上加上了@FeignClient
,Feign生成了实现此接口的运行时代理类。当某个Spring组件尝试自动连接类型为SomeClient
的bean时,由于项目中实际上不存在任何实际类,并且没有教导Idea理解其中的SomeClient
注释,因此Idea抱怨没有找到类型为@FeignClient
的bean。任何方式。
解决方案:用SomeClient
注释接口@Component
。 (在我们的示例中,我们不直接在@FeignClient
上使用SomeClient
批注,而是使用元注解@OurProjectFeignClient
,将其注解为@FeignClient
并向其中添加@Component
注解它也一样。)
答案 16 :(得分:1)
IntelliJ IDEA Ultimate
将您的主类添加到IntelliJ Spring Application Context中,例如Application.java
File
-> Project Structure..
左侧: 项目设置->模块
右侧:在包装结构中查找
Spring
并添加+
Application.java
答案 17 :(得分:1)
就我而言,我尝试@Autowired的目录不在同一级别,
将其设置为相同的结构级别后,错误消失
希望它可以帮助一些人!
答案 18 :(得分:1)
您是否检查过在服务实现的顶部使用了@services
注释?
它对我有用。
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserServices {}
答案 19 :(得分:1)
对我来说,解决方案是将@EnableAutoConfiguration
放在Application类中的@SpringBootApplication
下,因为它是多余的,所以要加下划线。删除它,瞧所有关于缺少豆子的警告都消失了!愚蠢的春天...
答案 20 :(得分:1)
可以通过在Spring Boot应用程序主类上放置@EnableAutoConfiguration来解决。
答案 21 :(得分:1)
我只需要使用@EnableAutoConfiguration来解决它,但是此错误对功能没有影响。
答案 22 :(得分:1)
作为 IntelliJ (IDE) 和开发环境之间的大多数同步错误。
特别是如果您有自动化测试或构建一直通过绿色。
使缓存无效并重新启动解决了我的问题。
答案 23 :(得分:1)
您需要做的就是使用以下代码:
@ComponentScan
public class PriceWatchTest{
@Autowired
private PriceWatchJpaRepository priceWatchJpaRepository;
...
...
}
答案 24 :(得分:1)
这似乎仍然是最新的IntelliJ中的一个错误,并且与可能的缓存问题有关?
如果将@Repository注释添加为上面提到的mk321,请保存,然后删除注释并再次保存,这样可以解决问题。
答案 25 :(得分:0)
将注释@Service
添加到您的存储库类中,它应该可以工作。
答案 26 :(得分:0)
只需在POJO中添加以下两个注释即可。
@ComponentScan
@Configuration
public class YourClass {
//TODO
}
答案 27 :(得分:0)
在我的情况下,我的班级文件夹地址错误,请检查您的班级包装是否正确。
答案 28 :(得分:0)
我遇到了同样的问题,并使用“文件”菜单下的“无效缓存...”解决了它。
答案 29 :(得分:0)
我有一个 ServerService.java
类。由于存在此问题,因此未将其分配为 @Bean
。
@SpringBootApplication
public class HelloServerApplication {
public static void main(String[] args) {
SpringApplication.run(HelloServerApplication.class, args);
}
@Bean
public ServerService getServerService() {
return new ServerService();
}
}
为了在 spring 框架中创建 bean 并将其注入类,Class
应在类级别相应地标记为 @Componet、@Service 或 @Repository。确保您使用过它。
答案 30 :(得分:0)
简单,您必须执行2个步骤
==>> change @Autowired to @Resource
答案 31 :(得分:0)
我通过在IDEA中安装mybatis插件解决了该问题。当我安装Mybatis插件时,它消失了。
答案 32 :(得分:0)
检查您是否在服务类中错过了@Service注释,对我而言就是这种情况。
答案 33 :(得分:0)
使用@AutoConfigureMockMvc作为测试类。
答案 34 :(得分:0)
检查您的bean软件包是否正确编写
//Check if this is written right
package com.package1.package2.package3
import ...
@Service
class ServiceX {
...
}
答案 35 :(得分:0)
令人惊讶的是,成功与Eclipse一起运行的面向Feign的项目无法在InteliJ中运行。 启动应用程序时,InteliJ抱怨我尝试向serviceImpl层注入的Feign客户端说: ...中的field personRestClient(我的Feign客户端)需要类型为...的bean,但找不到。 考虑在配置中定义类型为“ ....”的bean。
我浪费了很长时间试图去了解问题所在。 我找到了一个我不完全理解的解决方案(针对InteliJ):
或选择Eclipse:)
答案 36 :(得分:0)
有时-在我的情况下-原因是错误的导入。我不小心导入了
import org.jvnet.hk2.annotations.Service
代替
import org.springframework.stereotype.Service
通过盲目接受Idea的建议进口中的第一选择。第一次发生时花了我几分钟:-)
答案 37 :(得分:0)
我在Spring启动应用程序中解决这个问题的方法是打开spring应用程序上下文并手动为缺少的autowired bean添加类!
(通过Project Structure菜单或弹簧工具窗口访问...编辑“Spring Application Context”)
因此,仅包含我的ExampleApplication spring配置的SpringApplicationContext,它还包含缺少的Bean:
SpringApplicationContext:
etvoilà:错误消息消失了!
答案 38 :(得分:-1)
以我为例,我将 @Autowired 更改为 @Resource ,并且错误的提示消失了
答案 39 :(得分:-12)
我也遇到过这个问题,并通过删除Spring Facet来解决它:
Facets