Tôi có một ứng dụng Spring Boot (Y) mà dựa vào một bộ các tập tin thư viện đóng gói như x.jar và nhắc đến như một sự phụ thuộc trong pom.xml của Y. ứng dụngTôi có thể không @Autowire một Bean hiện diện trong Thư viện phụ thuộc không?
x.jar có một bean tên (User.java) Application Y có một lớp java tên (Department.java)
trong khi tôi cố gắng để Autowire một thể hiện của User.java bên Department.java, tôi nhận được lỗi sau
Can 't I @Autowire a Bean hiện diện trong Jar thư viện phụ thuộc?
không lĩnh vực autowire Could: dùng com.User tư nhân; ngoại lệ lồng nhau là org.springframework.beans.factory.NoSuchBeanDefinitionException: Không có loại đậu đủ điều kiện [com.User] được tìm thấy cho sự phụ thuộc: dự kiến tại ít nhất 1 bean đủ điều kiện làm ứng cử viên tự động cho phụ thuộc này. Phụ thuộc chú thích: {@ org.springframework.beans.factory.annotation.Autowired (bắt buộc = true)}
Không đủ điều kiện đậu các loại [com.User] tìm thấy cho sự phụ thuộc: dự kiến ít nhất 1 đậu mà đủ điều kiện như autowire ứng cử viên cho sự phụ thuộc này . Phụ thuộc chú thích: {@ org.springframework.beans.factory.annotation.Autowired (bắt buộc = true)} **
Đây là đoạn mã vào mùa xuân Boot Application 'Y'
package myapp;
@Component
public class Department {
@Autowired
private com.User user;
//has getter setters for user
}
đây là mã của User.java trong Thư viện x.jar
package com;
@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {
private String name;
//has getter setters for name
}
đây là entry phụ thuộc cho x.jar trong pom.xml của ứng dụng Y
<groupId>com.Lib</groupId>
<artifactId>x</artifactId>
<version>001</version>
</dependency>
Đây là lớp học chính trong ứng dụng 'Y'
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
Cả hai Bộ Ngoại giao và người dùng được dưới các gói khác nhau.
Giải pháp: Tôi đã áp dụng 2 bước sau và giờ đây Autowiring đang hoạt động tốt.
Bước 1: Thêm lớp sau trong file jar
package com
@Configuration
@ComponentScan
public class XConfiguration {
}
Bước 2: Nhập khẩu lớp Cấu hình này trong lớp học chính dự án của Y
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
@Import(XConfiguration.class)
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
Hiện bối cảnh ứng dụng của bạn xin vui lòng. – Jens
Bạn có thể không có quét thành phần cho các gói của thư viện đó –
chúng tôi đã không sử dụng XML ngữ cảnh ứng dụng, chỉ các chú thích. Ứng dụng Y là một ứng dụng khởi động mùa xuân. – yathirigan