如何在spring-boot中定义依赖注入?

时间:2017-09-12 09:05:13

标签: java spring spring-boot gradle dependency-injection

我尝试使用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会计算出依赖关系。

提前感谢您的建议!

1 个答案:

答案 0 :(得分:1)

默认情况下,springboot将扫描Application类的子包中的所有组件。您没有指定组件扫描,因此请确保所有类都在Application的相同包或子包中。