Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @Autowired没有将我的服务注入我的托管bean中_Java_Spring_Hibernate - Fatal编程技术网

Java @Autowired没有将我的服务注入我的托管bean中

Java @Autowired没有将我的服务注入我的托管bean中,java,spring,hibernate,Java,Spring,Hibernate,我正在尝试执行以下测试: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = DBDataManipulatorServiceTestContext.class, loader = SpringApplicationContextLoader.class) @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST

我正在尝试执行以下测试:

 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes = DBDataManipulatorServiceTestContext.class, loader =  
  SpringApplicationContextLoader.class)
 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
 public class UserInterfaceBeanTest {

 @Autowired
private DBDataManipulatorService dbDataManipulatorService;
 .....

 @Test
public void testGetDistinctWorkPackageId() {

    WorkPackage workPackage1 = new WorkPackage();
    workPackage1.setWorkPackageId("TEST1");
    workPackage1.setWorkPackageName("WP_1");

    WorkPackage workPackage2 = new WorkPackage();
    workPackage2.setWorkPackageId("TEST2");
    workPackage2.setWorkPackageName("WP_2");

    WorkPackage workPackage3 = new WorkPackage();
    workPackage3.setWorkPackageId("TEST3");
    workPackage3.setWorkPackageName("WP_3");

    WorkPackage workPackage4 = new WorkPackage();
    workPackage4.setWorkPackageId("TEST4");
    workPackage4.setWorkPackageName("WP_4");

    Aircraft aircraft1 = new Aircraft();
    aircraft1.setAircraftId(50001);
    aircraft1.setModel("100");

    Aircraft aircraft2 = new Aircraft();
    aircraft2.setAircraftId(50002);
    aircraft2.setModel("100");

    aircraft1.addOrUpdateWorkPackageToAircraft(workPackage1);
    aircraft1.addOrUpdateWorkPackageToAircraft(workPackage3);

    aircraft2.addOrUpdateWorkPackageToAircraft(workPackage2);
    aircraft2.addOrUpdateWorkPackageToAircraft(workPackage3);

    Map<Integer, Aircraft> aircraftsMap = new HashMap<Integer, Aircraft>();
    aircraftsMap.put(50001, aircraft1);
    aircraftsMap.put(50002, aircraft2);


    UserInterfaceBean userInterfaceBean = new UserInterfaceBean();
    userInterfaceBean.setModel("100");

    aircraftsMap = dbDataManipulatorService.saveToDataBase(aircraftsMap);

    List<String> workPackgesIds = userInterfaceBean.getDistinctWorkPackageId();

    assertTrue(workPackgesIds.contains("TEST1"));
    assertTrue(workPackgesIds.contains("TEST2"));
    assertTrue(workPackgesIds.contains("TEST3"));
    assertTrue(!workPackgesIds.contains("TEST4"));
}
谁能告诉我哪里出了问题?以及如何解决这个问题

编辑

以下是我的DbDataManipulator服务示例:

@Service
@Transactional
public class DBDataManipulatorServiceImpl implements DBDataManipulatorService {

.....

}
这是它的界面:

 public interface DBDataManipulatorService {


public AircraftRepository getAircraftRepository();

public Aircraft getAircraftById(String id);

public Map<Integer, Aircraft> saveToDataBase(Map<Integer, Aircraft> aircrafts);

public MyJob findJobByJobId(String jobId);

public WorkPackage findWorkPackageByAircraftIdAndWorkPackageId
                        (int aircraftId, String workPackageId);

public Aircraft findAircraftByaircraftId(int aircraftId);

public List<Aircraft> findAllAircrafts();

public List<String> findAllAvailableAircraftsModels();

public List<Aircraft> findAllAircraftsByModel(String model);

public List<WorkPackage> getWorkPackagesByAircraftModel(String model);
公共接口DBDataManipulator服务{
公共航空器存储库getAircraftRepository();
公共飞机getAircraftById(字符串id);
公共地图保存数据库(飞机地图);
公共MyJob findJobByJobId(字符串jobId);
公共工作包FindWorkPackageByAircrafter ID和WorkPackageID
(int aircraftId,字符串工作包ID);
公共飞机findAircraftByaircraftId(国际飞机ID);
公共列表FindArcrafts();
公共列表FindAvailableAircrafts模型();
公共列表findAllAircraftsByModel(字符串模型);
公共列表getWorkPackagesByAircraftModel(字符串模型);

}默认情况下,
@Autowired
注释意味着必须找到bean,否则您将得到一个bean not found异常

有几件事可能导致这种情况:

  • 单元测试是通过
    new DBDataManipulatorServiceContext()
    实例化的,而不是作为springbean进行扫描,在这种情况下,
    @Autowired
    被忽略

  • 有一些XML配置覆盖了annotations配置,因此bean首先是在启用autowiring的情况下创建的,然后被XML中定义的bean丢弃,没有为缺少的属性提供参数


您需要以某种方式标记DBDataManipulator服务类。在类名上使用@service或@component注释。这将告诉spring管理类,从而将其注入到测试中。

您有一个
@ComponentScan
,但您没有输入要扫描的包的名称。默认行为是从您放置了
@ComponentScan
的包中进行扫描,基本上就是您的
dbdatamanufactorservicecontext
config类的包。我猜这不是您的
dbdatamanufactorservice
所在的位置,如果是的话,请为您的
@ComponentScan

指定一个包名。谢谢您的努力,但是,您没有告诉我如何解决我的问题:您的
dbdatamanufactorservice
bean的配置在哪里。您的配置不正确。请检查更新的编辑。DBDataManipulatorServiceTestContext中有什么?我猜您复制了DBDataManipulatorServiceContext类的内容。是吗?是的,是的。我需要更改什么吗?请注意我的代码。我已经使用:lef.setPackagesToScan(“com”)指定了要在DbDataManufactorServiceContext中扫描的包,而DbDataManufactorService位于com.services中这将不起作用,该扫描是针对JPA实体类的,而不是针对SpringBeans的,您必须按我指定的方式添加@ComponentScan。我可能还遗漏了一件事-看起来您需要在DBDataManipulator Service Context上添加
@Configuration
,您也可以尝试添加它吗。如果这不起作用,请在github项目中共享一小部分工作测试,这可能会更容易。
 public interface DBDataManipulatorService {


public AircraftRepository getAircraftRepository();

public Aircraft getAircraftById(String id);

public Map<Integer, Aircraft> saveToDataBase(Map<Integer, Aircraft> aircrafts);

public MyJob findJobByJobId(String jobId);

public WorkPackage findWorkPackageByAircraftIdAndWorkPackageId
                        (int aircraftId, String workPackageId);

public Aircraft findAircraftByaircraftId(int aircraftId);

public List<Aircraft> findAllAircrafts();

public List<String> findAllAvailableAircraftsModels();

public List<Aircraft> findAllAircraftsByModel(String model);

public List<WorkPackage> getWorkPackagesByAircraftModel(String model);