@Autowired无法注入问题解决

   问题所在的源码段如下所示,这是一个对DAO层的测试类,在第5行中对ProductCategoryRepository类无法进行注入,每一次DEBUG都是显示为NULL。

@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductCategoryRepositoryTest {
    @Autowired
    private ProductCategoryRepository repository;
    @Test
    public void findOneTest()
    {
        ProductCategory productCategory = repository.findOne(  1);
        System.out.println(productCategory.toString());
    }
}

1.首先来了解   @Autowired无法注入的原因:

  • @Autowired为自动装配,将对象自动注入到类中使用.

  • @Autowired注入有两个条件,被注入的类的对象交给了spring管理,同时使用的类的对象也要交给spring管理.两个条件都满足才能注入.

2.参照了网上的许多方法,包括了:

(1)将@SpringBootTest设置成@SpringBootTest(classes = SellApplication.class),把类交给spring管理的同时,添加classes

性来添加springboot项目的启动类,这一点必不可少。

(2)测试类和被测试类的目录必须一样。

(3)测试类不能为springboot项目的启动类的上级,因为扫描时,会从启动类所在包以及其底层这样的顺序扫描,其上层包无法被扫描。

(4)在ProductCategoryRepository 类上加入注解@Repository,但是我的项目可以不加这个注解。

3.当所有方法都测试过之后依旧不行,怀疑是版本不兼容问题,因为我的springboot版本是1.5.3,maven版本是3.6.3,而我的JDK版本是13,所以需要对JDK进行降级,在这里JDK需要降级为1.7版,在idea中JDK的降级步骤是:

(1)下载JDK1.7版本:官方下载链接

(2)安装JDK1.7,改计算机环境变量等:详细步骤

(3)在idea的springboot项目中进行更改,需要改以下几个地方,缺一不可。完成后对pom.xml重新import,对整个项目rebuild就可以:

①setting中(打红框部分改成1.7或7即可):

②Project Structer中:(打红框部分改成1.7或7即可)

è¿éåå¾çæè¿°

③更改pom.xml,添加如下代码:

<build>  
    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-compiler-plugin</artifactId>  
            <configuration>  
                <source>1.7</source>  
                <target>1.7</target>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>

(4)此时,启动项目没有问题,但是运行测试方法时出现问题,因此此时需要相应的更改JUNIT配置,将原来的JUNIT5降为JUNIT4,不然模块test的时候,会出现错误“com/intellij/junit5/JUnit5IdeaTestRunner : Unsupported major.minor version 52.0”,过程为:JUNIT4配置过程JUNIT4配置过程参考2

(5)运行测试方法时候出现错误:springboot available: expected at least 1 bean which qualifies as autowire candidate。

         解决方法:添加注解@SpringBootApplication

         原因:@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。

         ①@Configuration的注解类标识这个类可以使用Spring IoC容器作为bean定义的来源。@Bean注解告诉Spring,一个带有@Bean的注解方法将返回一个对象,该对象应该被注册为在Spring应用程序上下文中的bean。

         ②@EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。

         ③@ComponentScan:会自动扫描指定包下的全部标有@Component的类,并注册成bean,当然包括@Component下的子注解@Service,@Repository,@Controller。

4.至此,成功解决问题,可以正常进行注入。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值