我有两个模块的网络和业务。我已将业务纳入网络。但是,当我尝试将业务到Web使用的服务接口包括在内时@autowired,它确实很实用org.springframework.beans.factory.NoSuchBeanDefinitionException。
@autowired
org.springframework.beans.factory.NoSuchBeanDefinitionException
因此,基本上@SpringBootApplication无法扫描@Service来自业务模块。
@SpringBootApplication
@Service
这很简单,我想念吗?
如果我@Bean在@SpringBootApplication该类中添加了该服务,它就可以正常工作。
@Bean
码:
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 { }
谢谢,
@SpringBootApplication 仅扫描带有注释本身的类的包以及下面的所有包。
示例:如果带有SpringBootApplication批注的类在package中com.project.web,则将扫描此包以及下面的所有包。
com.project.web
但是,如果您的服务包中有服务,com.project.business则不会扫描bean。
com.project.business
在这种情况下,您必须将注释添加@ComponentScan()到应用程序类中,然后将要扫描的所有软件包都添加为该注释中的值,例如@ComponentScan({"com.project.web", "com.project.business"})。
@ComponentScan()
@ComponentScan({"com.project.web", "com.project.business"})