相关疑难解决方法(0)

如何使用Spring Autowire编写JUnit测试?

这是我使用的文件:

component.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd 
         http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd">

    <context:component-scan
        base-package="controllers,services,dao,org.springframework.jndi" />
</beans>
Run Code Online (Sandbox Code Playgroud)

ServiceImpl.java

@org.springframework.stereotype.Service
public class ServiceImpl implements MyService {

    @Autowired
    private MyDAO myDAO;

    public void getData() {...}    
}
Run Code Online (Sandbox Code Playgroud)

ServiceImplTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:conf/components.xml")
public class ServiceImplTest{

    @Test
    public void testMyFunction() {...}
}
Run Code Online (Sandbox Code Playgroud)

错误:

16:22:48.753 [main] ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@2092dcdb] to prepare test instance [services.ServiceImplTest@9e1be92]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'services.ServiceImplTest': Injection of autowired dependencies failed; nested exception …
Run Code Online (Sandbox Code Playgroud)

java spring junit4 playframework-2.0

25
推荐指数
4
解决办法
10万
查看次数

服务层验证(SpringBoot)

我有一个 DTO,它在控制器层使用 BeanValidation (javax.validation) 和自定义验证器 (org.springframework.validation.Validator) 的组合进行验证。这样我可以检查提供的输入是否有效,然后将 DTO 转换为实体并将其转发到服务层。

    @Data
    public class UserDTO {

            @NotBlank
            @Size(max = 25)
            private String name;

            @NotNull
            private Date birthday;

            @NotNull
            private Date startDate;

            private Date endDate;

            private Long count;

    }

    public class UserDTOValidator implements Validator {
        private static final String START_DATE= "startDate";
        private static final String END_DATE= "endDate";
        private static final String COUNT= "count";

        @Override
        public boolean supports(Class<?> clazz) {
            return UserDTO.class.isAssignableFrom(clazz);
        }
        @Override
        public void validate(Object target, Errors errors) {

            UserDTO vm = …
Run Code Online (Sandbox Code Playgroud)

java validation design-patterns hibernate spring-boot

5
推荐指数
1
解决办法
4002
查看次数

Spring Boot - Hibernate 自定义约束不注入服务

我将尝试忽略其他细节并使其简短:

@Entity
public class User
    @UniqueEmail
    @Column(unique = true)
    private String email;
}

@Component
public class UniqueEmailValidatior implements ConstraintValidator<UniqueEmail,String>, InitializingBean {

    @Autowired private UserService userService;

    @Override
    public void initialize(UniqueEmail constraintAnnotation) {

    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if(userService == null) throw new IllegalStateException();
        if(value == null) return false;
        return !userService.isEmailExisted(value);
    }

}
Run Code Online (Sandbox Code Playgroud)

这将在 Spring 中进行验证(Spring MVC@Valid或注入Validatorusing @Autowire)时起作用,一切都会好起来的。但是一旦我使用 Spring Data JPA 保存实体:

User save = userRepository.save(newUser);
Run Code Online (Sandbox Code Playgroud)

Hibernate 将尝试在UniqueEmailValidatior不注入UserServicebean 的情况下实例化一个新的。那么如何让 …

spring hibernate-validator spring-boot

2
推荐指数
1
解决办法
1979
查看次数