多模块组件扫描在弹簧启动时不起作用

时间:2015-10-12 11:42:35

标签: java spring spring-boot

我有两个模块网络和业务。我已将业务纳入网络。但是,当我尝试使用@autowired将业务中的服务界面包含到网络中时,它正在提供org.springframework.beans.factory.NoSuchBeanDefinitionException

因此,基本上@SpringBootApplication无法从业务模块中扫描@Service

这是不是很简单,我很遗憾?

如果我在@Bean课程中为该服务添加@SpringBootApplication,则说明工作正常。

代码:

package com.manish;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

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

模块1中的类,从模块2调用类:

package com.manish.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import uk.co.smithnews.pmp.service.contract.UserRegistrationService;

@RestController
@RequestMapping("/testManish")
public class SampleController {

    @Autowired
    private SampleService sampleService;
....
}

第2单元:

package com.manish.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class SampleServiceImpl implements SampleService {
}

谢谢,

1 个答案:

答案 0 :(得分:23)

@SpringBootApplication仅使用注释本身和下面的所有包扫描类的包。

示例:如果具有SpringBootApplication批注的类位于包com.project.web中,则此软件包及其下面的所有内容都将被扫描。

但是,如果您在包com.project.business中拥有服务,则不会扫描bean。

在这种情况下,您必须将注释@ComponentScan()添加到您的应用程序类中,并将要扫描的所有包作为值添加到该注释中,例如@ComponentScan({"com.project.web", "com.project.business"})