我尝试使用spring-boot创建一个spring web应用程序。我的第一个问题是依赖注入对我不起作用。这是我跟随的article。
我创建了一个Application类:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
然后我做了一个控制器:
@RestController
public class GreetingController {
@Autowired
WfExampleDao wfExampleDao;
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
wfStartDao.insert(null);
return new Greeting(counter.incrementAndGet(),
String.format(template, name));
}
}
我的例子:
public interface WfExampleDao {
public void insert(WfExample wfExample);
}
和我的接口实现:
@Component
public class WfExampleDaoImpl extends JdbcDaoSupport implements WfExampleDao {
private Logger logger;
public WfExampleDaoImpl() {
this.logger = LoggerFactory.getLogger(this.getClass());
}
@Override
public void insert(WfExample wfExample) {
logger.info("Insert is not implemented yet.");
}
}
我的gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.6.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: 'war'
war {
baseName = 'gs-rest-service'
version = '0.1.0'
}
jar {
baseName = 'gs-rest-service'
version = '0.1.0'
}
repositories {
mavenCentral()
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
compile group: 'org.springframework', name: 'spring-context', version: '4.3.11.RELEASE'
compile 'org.springframework:spring-jdbc:4.3.11.RELEASE'
compile 'commons-dbcp:commons-dbcp:1.4'
compile 'commons-pool:commons-pool:1.6'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.6.RELEASE'
providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '1.5.6.RELEASE'
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.5.6.RELEASE'
}
我的期望:当我打开/问候页面时,会出现日志,但我在gradle bootRun
的开头就得到了这个:
2017-09-12 10:47:56.058 WARN 7545 --- [主要] ationConfigEmbeddedWebApplicationContext:遇到异常 在上下文初始化期间 - 取消刷新尝试: org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名称为' greetingController的bean时出错':不满意 通过字段表达的依赖性' wfExampleDao&#39 ;;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 合格的bean类型为“hu.example.dao.WfExampleDao' 可用:预计至少有1个符合autowire资格的bean 候选人。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}
我不知道为什么找不到依赖。在我阅读时,我不必创建applicationContext.xml
,因为bootRun会计算出依赖关系。
提前感谢您的建议!
答案 0 :(得分:1)
默认情况下,springboot将扫描Application类的子包中的所有组件。您没有指定组件扫描,因此请确保所有类都在Application
的相同包或子包中。