有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java辅助类型依赖项注入在spring boot中不起作用

根据文档,spring boot将自动检查在任何带有@Configuration&;注释的类中创建的bean类对象;将覆盖该类的默认bean&;返回包含定义时注入的任何属性的对象。但当我在junit中测试这个应用程序时,它不会返回任何被注入的值。我所有的类都在同一个包中定义我的代码如下

//引擎类

package com.test.simpletest;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Engine {

private String msg;

public Engine() {
    System.out.println("Engine class is being called");
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}
}

//测试配置类

package com.test.simpletest;

import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestConfiguration{

@Bean
public Engine engine() {
    Engine eng = new Engine();
    eng.setMsg("Message is being called");
    return eng;
}
}

//Spring boot主应用程序

package com.test.simpletest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SimpleTestExampleApplication {

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

//测试JUnit类

package com.test.simpletest;

import org.junit.Test; 
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import 
org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SimpleTestExampleApplicationTests {

@Autowired 
private Engine engine; 

@Test
public void contextLoads() {

    engine.getMsg();

//Both above and below approach does not work 

//      ApplicationContext apx = new 
AnnotationConfigApplicationContext(TestConfiguration.class);
//      Engine engine = (Engine)apx.getBean(Engine.class);
//      engine.getMsg();
}
}

请帮我找到解决上述问题的办法


共 (2) 个答案

  1. # 1 楼答案

    请从引擎类中删除@Component并重试。我想它应该很好用

  2. # 2 楼答案

    演示应用程序

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

    引擎

    public class Engine {
        private String msg;
    
        public Engine() {
            System.out.println("Engine class is being called");
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    

    测试配置

    @Configuration
    public class TestConfiguration {
        @Bean
        public Engine getEngine() {
            Engine eng = new Engine();
            eng.setMsg("Message is being called");
            return eng;
        }
    }
    

    演示应用测试

    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Import(TestConfiguration.class)
    public class DemoApplicationTests {
    
        @Autowired
        private Engine engine;
    
        @Test
        public void contextLoads() {
            System.out.println("engine : " + engine.getMsg());
        }
    
    }
    

    输出

    Engine class is being called
    engine : Message is being called