Tôi đã tạo một bài kiểm tra đơn vị đơn giản nhưng IntelliJ không chính xác làm nổi bật nó màu đỏ. đánh dấu nó là một lỗi
Không có đậu?
Như bạn có thể thấy dưới đây nó vượt qua bài kiểm tra? Vậy nó phải là Autowired?
Tôi đã tạo một bài kiểm tra đơn vị đơn giản nhưng IntelliJ không chính xác làm nổi bật nó màu đỏ. đánh dấu nó là một lỗi
Không có đậu?
Như bạn có thể thấy dưới đây nó vượt qua bài kiểm tra? Vậy nó phải là Autowired?
Câu trả lời:
Tôi gặp vấn đề tương tự khi tạo ứng dụng Spring Boot bằng cách sử dụng @SpringBootApplication
chú thích của họ . Chú thích này đại diện @Configuration
, @EnableAutoConfiguration
và @ComponentScan
theo tài liệu tham khảo mùa xuân .
Đúng như dự đoán, chú thích mới hoạt động tốt và ứng dụng của tôi chạy trơn tru, nhưng Intellij cứ phàn nàn về @Autowire
sự phụ thuộc chưa hoàn thành . Ngay sau khi tôi thay đổi lại để sử dụng @Configuration
, @EnableAutoConfiguration
và @ComponentScan
riêng biệt, các lỗi chấm dứt. Có vẻ như Intellij 14.0.3 (và rất có thể, các phiên bản trước đó cũng vậy) chưa được cấu hình để nhận ra @SpringBootApplication
chú thích.
Hiện tại, nếu các lỗi làm phiền bạn nhiều như vậy, thì hãy quay lại ba chú thích riêng biệt đó. Mặt khác, bỏ qua Intellij ... độ phân giải phụ thuộc của bạn được cấu hình chính xác, vì thử nghiệm của bạn vượt qua.
Luôn luôn ghi nhớ...
Con người luôn vĩ đại hơn máy móc.
@SpringBootApplication
tôi đã nhận được lỗi này. Tôi đã làm theo lời khuyên của @ Jaõs Matos bằng cách sử dụng scanBasePackages
tham số @SpringBootApplication
và chỉ định gói / không gian tên cần được quét.
Thêm chú thích mùa xuân @Repository
trên lớp kho lưu trữ.
Tôi biết nó nên hoạt động mà không có chú thích này. Nhưng nếu bạn thêm cái này, IntelliJ sẽ không hiển thị lỗi.
@Repository
public interface YourRepository ...
...
Nếu bạn sử dụng Spring Data với Repository
lớp mở rộng thì đó sẽ là mâu thuẫn. Sau đó, bạn phải chỉ ra các trang thám hiểm.
import org.springframework.data.repository.Repository;
...
@org.springframework.stereotype.Repository
public interface YourRepository extends Repository<YourClass, Long> {
...
}
Và tiếp theo bạn có thể tự động lưu trữ kho lưu trữ của mình mà không gặp lỗi.
@Autowired
YourRepository yourRepository;
Nó có thể không phải là một giải pháp tốt (tôi đoán bạn đang cố gắng đăng ký repositorium hai lần). Nhưng làm việc cho tôi và không hiển thị lỗi.
Có thể trong phiên bản mới của IntelliJ có thể được sửa: https://youtrack.jetbrains.com/su/IDEA-137023
Phiên bản IntelliJ IDEA Ultimate của tôi (2016.3.4 Build 163) dường như hỗ trợ điều này. Mẹo nhỏ là bạn cần kích hoạt plugin Spring Data.
Đôi khi bạn được yêu cầu chỉ ra nơi @ComponentScan nên quét các thành phần. Bạn có thể làm như vậy bằng cách chuyển các gói làm tham số của chú thích này, ví dụ:
@ComponentScan(basePackages={"path.to.my.components","path.to.my.othercomponents"})
Tuy nhiên, như đã đề cập, chú thích @SpringBootApplication thay thế @ComponentScan, do đó trong những trường hợp như vậy, bạn phải làm như vậy:
@SpringBootApplication(scanBasePackages={"path.to.my.components","path.to.my.othercomponents"})
Ít nhất trong trường hợp của tôi, Intellij ngừng phàn nàn.
@SpringBootApplication(scanBasePackages={"com.a.b, com.a.c"})
và mặc dù ứng dụng hoạt động tốt, intellij không thích nó. Thay đổi thành @SpringBootApplication(scanBasePackages={"com.a.b", "com.a.c"})
cố định cho tôi!
Tôi luôn giải quyết vấn đề này khi thực hiện theo .. Cài đặt> Kiểm tra> Lõi mùa xuân> Mã hơn bạn chuyển từ lỗi sang cảnh báo tùy chọn mức độ nghiêm trọng
Tôi đang sử dụng spring-boot 2.0, và phiên bản cuối cùng của intellij 2018.1.1 và tôi gặp phải vấn đề tương tự.
Tôi đã giải quyết bằng cách đặt @EnableAutoConfiguration trong lớp ứng dụng chính
@SpringBootApplication
@EnableAutoConfiguration
class App{
/**/
}
Redundant declaration: @SpringBootApplication already applies @EnableAutoConfiguration
\ _ (ツ) _ /
Đặt @Component
hoặc @configuration
trong tập tin cấu hình bean của bạn dường như hoạt động, tức là một cái gì đó như:
@Configuration
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
@Component
public class MyApplicationContext {
@Bean
public DirectoryScanner scanner() {
return new WatchServiceDirectoryScanner("/tmp/myDir");
}
}
Nếu bạn không muốn thực hiện bất kỳ thay đổi nào đối với mã của bạn chỉ để làm cho IDE của bạn hài lòng. Tôi đã giải quyết nó bằng cách thêm tất cả các thành phần vào khía cạnh Spring.
Miễn là các bài kiểm tra của bạn vượt qua bạn là tốt, hãy nhấn alt + enter
bằng cách đưa con trỏ qua lỗi và bên trong menu con của mục đầu tiên bạn sẽ tìm thấy Disable Inspection
chọn
Tôi gặp vấn đề tương tự trong ứng dụng Spring Boot. Ứng dụng sử dụng Fagger (các yêu cầu tổng hợp ứng dụng khách HTTP từ các giao diện được chú thích). Có giao diện được SomeClient
chú thích @FeignClient
, Feign tạo lớp proxy thời gian chạy thực hiện giao diện này. Khi một số thành phần Spring cố gắng tự động loại đậu SomeClient
, Idea phàn nàn không SomeClient
tìm thấy loại đậu nào vì không có lớp thực sự tồn tại trong dự án và Idea không được dạy để hiểu @FeignClient
chú thích theo bất kỳ cách nào.
Giải pháp: chú thích giao diện SomeClient
với @Component
. (Trong trường hợp của chúng tôi, chúng tôi không sử dụng @FeignClient
chú thích SomeClient
trực tiếp, chúng tôi sử dụng metaannotation @OurProjectFeignClient
được chú thích @FeignClient
và thêm @Component
chú thích vào nó cũng hoạt động.)
@Component
vào giao diện giải quyết vấn đề. Nhưng tôi nghĩ rằng đây không phải là cách chính xác ... Theo tôi đây là một lỗi trong IntelliJ IDEA hoặc không quá khó IntelliJ IDEA chưa sẵn sàng cho các phiên bản Fagger mới hơn. Nó hoạt động mà không có @Component
trong các phiên bản giả tưởng trước đó (trong đó @FeignClient
chú thích org.springframework.cloud.netflix.feign
thay vì org.springframework.cloud.openfeign
- có lẽ đây là nguyên nhân của vấn đề?). Bạn đã tìm thấy bất kỳ chi tiết nào nữa (có thể là một vé lỗi) cho điều này?
@Component
) là @FeignClient
từ org.springframework.cloud.netflix.feign
gói.
Và một thông tin quan trọng cuối cùng - hãy thêm ComponentScan
để ứng dụng biết về những thứ cần thiết để kết nối. Điều này không liên quan trong trường hợp của câu hỏi này. Tuy nhiên nếu không @autowiring
được thực hiện ở tất cả thì đây có thể là giải pháp của bạn.
@Configuration
@ComponentScan(basePackages = {
"some_package",
})
public class someService {
Những gì bạn cần làm là thêm
@ComponentScan("package/include/your/annotation/component")
trong AppConfiguration.java
.
Vì tôi nghĩ AppConfiguraion.java
gói của bạn sâu hơn thành phần chú thích của bạn (@Service, @Component ...) của gói,
chẳng hạn như "package/include/your/annotation/component/deeper/config"
.
Tôi đã có một vấn đề tương tự trong ứng dụng của tôi. Khi tôi thêm chú thích không chính xác highlites biến mất.
@ContextConfiguration(classes = {...})
Tôi đang sử dụng chú thích này để ẩn lỗi này khi nó xuất hiện trong IntelliJ v.14:
@SuppressWarnings("SpringJavaAutowiringInspection")
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
Đối với tôi, giải pháp là đặt @EnableAutoConfiguration
vào lớp Ứng dụng theo @SpringBootApplication
cách gạch chân nó vì nó dư thừa. Xóa nó và voila tất cả các bạn cảnh báo về đậu bị mất đã biến mất! Mùa xuân ngớ ngẩn ...
Giải pháp của tôi cho vấn đề này trong ứng dụng khởi động mùa xuân của tôi là mở bối cảnh ứng dụng mùa xuân và thêm lớp cho đậu tự động bị thiếu bằng tay!
(truy cập qua menu Cấu trúc dự án hoặc cửa sổ công cụ mùa xuân ... chỉnh sửa "Bối cảnh ứng dụng mùa xuân")
Vì vậy, thay vì SpringApplicationContext chỉ chứa cấu hình mùa xuân exampleApplication của tôi, nó cũng chứa Bean bị thiếu:
SpringApplicationContext:
et voilà: Thông báo lỗi biến mất!
Đây dường như vẫn là một lỗi trong IntelliJ mới nhất và có liên quan đến vấn đề bộ nhớ đệm có thể xảy ra?
Nếu bạn thêm chú thích @Rep repository như mk321 đã đề cập ở trên, hãy lưu, sau đó xóa chú thích và lưu lại, điều này sẽ khắc phục vấn đề.
Tôi chỉ phải sử dụng @EnableAutoConfiguration để giải quyết nó, tuy nhiên lỗi này không có tác động chức năng.
Nó có thể được giải quyết bằng cách đặt @EnableAutoConfiguration trên lớp chính của ứng dụng khởi động mùa xuân.
Đôi khi - trong trường hợp của tôi là - lý do là nhập sai. Tôi vô tình nhập
import org.jvnet.hk2.annotations.Service
thay vì
import org.springframework.stereotype.Service
bằng cách chấp nhận một cách mù quáng sự lựa chọn đầu tiên trong hàng nhập khẩu được đề xuất của Idea. Mất vài phút khi lần đầu tiên xảy ra :-)
Đáng ngạc nhiên, một dự án định hướng Fict chạy thành công với Eclipse không thể chạy trong InteliJ. Khi khởi động ứng dụng, InteliJ đã phàn nàn về ứng dụng khách Fict mà tôi đã cố gắng tiêm vào lớp serviceImpl với nội dung: field personRestClient (ứng dụng khách Fict của tôi) trong ... yêu cầu một loại đậu ... không thể tìm thấy. Xem xét việc xác định một loại đậu '....' trong cấu hình của bạn.
Tôi đã lãng phí một thời gian dài để cố gắng hiểu những gì là sai. Tôi đã tìm thấy một giải pháp (cho InteliJ) mà tôi hoàn toàn không hiểu:
Hoặc chọn Eclipse :)
Sử dụng @AutoConfigureMockMvc cho lớp kiểm tra.
đơn giản bạn phải làm 2 bước
==>> change @Autowired to @Resource
IntelliJ IDEA Cuối cùng
Thêm lớp chính của bạn vào Bối cảnh ứng dụng mùa xuân của IntelliJ, ví dụ Application.java
File
-> Project Structure..
bên trái: Cài đặt dự án -> Mô-đun
bên phải: tìm trong cấu trúc gói của bạn
Spring
và thêm+
Application.java