gpt4 book ai didi

java - Spring Autowiring 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 20:16:14 24 4
gpt4 key购买 nike

我正在编写一个基于 Java Spring 的库。我已经为他们编写了junit测试。我遇到的问题是,虽然我的 bean 被打印出来,但它们没有正确地自动连接。它们是空的。

这是代码。

@Test
public void test() {
System.out.println(Arrays.asList(applicationContext.getBeanDefinitionNames()));

try{
DBClient dbClient = new DBClient();
dbClient.doSomething();
}catch(Exception e){
e.printStackTrace();
}
}

这是我的 DBClient 代码:

    @Autowired
@Qualifier("UserActivityRepositoryService")
private UserActivityRepositoryService userRepositoryService;

public void doSomething() {
System.out.println("Inside db client. Getting the count");
System.out.println(this.userRepositoryService.count());
}

这是我的 UserRepositoryService 类代码

@Service
@Qualifier("UserActivityRepositoryService")
public class UserActivityRepositoryService implements IRepoClient<UserActivity>{

private UserActivityRepository repo;

@Autowired
public void setUserActivityRepository(UserActivityRepository repo) {
this.repo = repo;
}

public void create(UserActivity userActivity) {
repo.save(userActivity);

}

@Override
public UserActivity save(UserActivity entity) {
// TODO Auto-generated method stub
System.out.println("Creating the documenht");
try{
repo.save(entity);
}catch(Exception e){
e.printStackTrace();
}
System.out.println("userActivity" + entity);
return null;
}

@Override
public Iterable<UserActivity> save(Iterable<UserActivity> entities) {
// TODO Auto-generated method stub
return null;
}

@Override
public UserActivity findOne(String id) {
// TODO Auto-generated method stub
return null;
}

@Override
public boolean exists(String id) {
// TODO Auto-generated method stub
return false;
}

@Override
public Iterable<UserActivity> findAll() {
// TODO Auto-generated method stub
return null;
}

@Override
public Iterable<UserActivity> findAll(Iterable<String> ids) {
// TODO Auto-generated method stub
return null;
}

@Override
public void delete(String id) {
// TODO Auto-generated method stub

}

@Override
public void delete(UserActivity entity) {
// TODO Auto-generated method stub

}

@Override
public void delete(Iterable<? extends UserActivity> entities) {
// TODO Auto-generated method stub

}

@Override
public void deleteAll() {
// TODO Auto-generated method stub

}

@Override
public long count() {
// TODO Auto-generated method stub
return 0;
}
}

这是我的输出:[org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.event.internalEventListenerProcessor ,org.springframework.context.event.internalEventListenerFactory,myCouchbaseConfig,integrationTestConfig,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor.enhancedConfigurationProcessor,CBRepoFactory,repoFactoryBuilder,配置,userActivityRepositoryService,couchbaseBucket,couch基簇、couchbaseClusterInfo、couchbaseEnv、couchbaseTranslationService、couchbaseIndexManager、couchbaseMappingConverter、couchbaseTemplate、couchbaseRepositoryOperationsMapping、couchbaseMappingContext、couchbaseCustomConversions、org.springframework.data.couchbase.repository.config.CouchbaseRepositoryConfigurationExtension#0、userActivityRepository]java.lang.NullPointerException内部数据库客户端。获取计数

谁能告诉我我做错了什么。

最佳答案

经典的 Spring 新手错误。我已经看过一千遍了。

您 Autowiring 了一个类DBClient,期望 Spring 为您处理所有依赖注入(inject)。

然后通过调用new实例化您自己的实例:

DBClient dbClient = new DBClient();

一旦你调用了new,它就脱离了Spring的控制。这里没有进行自动连接,UserActivityRepositoryService 为 null。

你必须选择:要么让 Spring 控制一切,要么你自己做。

如果您正在测试,我建议您使用模拟并将 Spring 排除在 JUnit 测试之外。

我还建议您更喜欢构造函数注入(inject)而不是 getter/setter。这样,您就可以在需要时在代码中执行此操作,例如在编写单元测试时。

看起来您正在尝试编写数据服务。我建议您忘记框架并使用 Spring Boot。已经does this为你。

关于java - Spring Autowiring 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45744564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com