1

像这样的许多类似问题,但没有一个解决方案对我有用。我有一个扩展 MondoRepository 的存储库接口。

public interface Repository extends MongoRepository<Subject, String> {
    Subject findByName(String name);
}

这是主题课

public class Subject {
    @Id
    private String id;

    private String name;

    public String getName() {
        return this.name;
    }
}

上面两个文件在/db包 中

如果我在我的应用程序类中自动装配存储库,我就可以正确使用它。

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@EnableMongoRepositories(basePackageClasses=Repository.class )
public class Application implements CommandLineRunner{

@Bean
public Service service() {
    return new Service();
}

@Autowired
private Repository repository;

@Override
public void run(String... args) throws Exception {

    repository.save(new Subject());

    Subject subject = repository.findByName("hello");

}

public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
}
}

我的Application课程在根文件夹/中。

基本上,这没有给我任何错误。但是如果我在这样的服务类中自动装配它

public class Service {

@Autowired
private Repository repository;

public String get() {
    repository.findByName("hello");

    return "";
}
}

这给了我一行中的空指针异常repository.findByName()。我的Service课在/servicepackage 中。

为什么它的行为与应用程序类中的不同?为了能够在服务类中使用存储库,我应该做些什么不同的事情?

我尝试过的-
我尝试用 注释我的Service课程@Service, @Repository, @Component,但没有一个有效。

@ComponentScan(basePackageClasses = Service.name)我尝试为班级添加annonation Application,但没有用。

任何解决方法也可以 -

4

1 回答 1

1

也许是因为春天没有扫描存储库或服务?你注释为@service、@repository 还是@component?

这些对我有用:

@SpringBootApplication
@EnableMongoRepositories
public class DemoApplication implements CommandLineRunner{

    @Autowired
    private Service service;


    @Override
    public void run(String... args) throws Exception {

        String subject = service.get();
        System.out.println("Hola" + subject);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@org.springframework.stereotype.Service
public class Service {
    @Autowired
    private Repository repository;

    public String get() {
        repository.findByName("hello");

        return "";
    }
}
于 2017-03-01T21:22:11.800 回答