SpringBoot@Componet注解注入失败的问题

目录
  • @Componet注解注入失败
    • 问题描述
    • 解决方法
  • SpringBoot @component的作用
    • 介绍
    • 举例说明
  • 总结

@Componet注解注入失败

问题描述

在springboot程序编写中,明明给Person类加了@Component注解,容器却显示找不到Person类的Bean对象。

网上找了很多种常规解法,发现都无效,后来才意识到,可能是包扫描的问题,由于当时我的主程序是放在一个与主程序同名的文件夹下,根据默认包扫描规则–扫描主程序所在包及其所有子包中的类,那么方在domain包下的Person类自然不会被扫描到,所以@Component虽然标注了,但却不会生效。

解决方法

在主程序上添加Componet注解

@ComponentScan("com.example")

让springboot成功扫描example下的所有包,则水到渠成,问题解决

SpringBoot @component的作用

踩到一个坑,有一个接口,在这个接口的实现类里,需要用到@Autowired注解,一时大意,没有在实现类上加上@Component注解,导致了Spring报错,找不到这个类

一旦使用关于Spring的注解出现在类里,例如我在实现类中用到了@Autowired注解,被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,加上@Component

@Component("conversionImpl")
//其实默认的spring中的Bean id 为 conversionImpl(首字母小写)
public class ConversionImpl implements Conversion {
    @Autowired
    private RedisClient redisClient;
}

介绍

开发中难免会遇到这个这个注解@Component

@Controller 控制器(注入服务)

用于标注控制层,相当于struts中的action层

@Service 服务(注入dao)

用于标注服务层,主要用来进行业务的逻辑处理

@Repository(实现dao访问)

用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件.

@Component (把普通pojo实例化到spring容器中,相当于配置文件中的 )

泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。

举例说明

这是在配置文件中的书写格式,如spring mvc中的applicationcontent.xml,

格式:

<bean id="" class=""/>

在spring boot中的话,因采用的是零配置所以要直接在类上加入@component注解就可以了

下面写这个是引入component的扫描组件

<context:component-scan base-package=”com.mmnc.*”> 

上面的这个例子是引入Component组件的例子,其中base-package表示为需要扫描的所有子包。

共同点:

被@controller 、@service、@repository 、@component 注解的类,都会把这些类纳入进spring容器中进行管理

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot Test类注入失败的解决

    如下所示 本来 bookService的引用一直是null. 导致每次测试都报空指针异常. 然后现在继承相应的 ApplicationTests类,然后使用@Component将该类注册为组件.就可以正常注入了. 补充:关于springboot test @Mapper ,@Autiwired注入无效的问题 @SpringBootTest() @RunWith(SpringRunner.class) public class ProductMapperTest { @Autowired Prod

  • Springboot项目中单元测试时注入bean失败的解决方案

    目录 Springboot项目中单元测试时注入bean失败 问题背景 问题描述 问题解决 Springboot单元测试,注入失败,报空指针错误 下面是测试类 Springboot项目中单元测试时注入bean失败 问题背景 最近公司项目搭了一个springboot项目进行开发,在单元测试时,由于生成项目后可能哪个同事把项目生产的test文件目录删了,也不知道是项目生成时test目录没有生成,需要自己建立一个test目录进行测试. 就是下图中的红框部分... 问题描述 在上图中的test目录建好之后

  • SpringBoot解决@Component无法注入其他Bean的问题

    目录 SpringBoot @Component无法注入其他Bean 一.现象 二.解决 三.代码如下 @Component注解自动注入失效问题 SpringBoot @Component无法注入其他Bean 一.现象 在SpringBoot新new一个普通类,习惯性添加@Component让Spring扫描. 在@Component修饰的类里注入了其他Bean,运行时提示注入的为null 但这个Bean可以在控制层被引入,在普通类就不行. 二.解决 找了些资料,最后也没解决注入的问题. 最后的

  • SpringBoot@Componet注解注入失败的问题

    目录 @Componet注解注入失败 问题描述 解决方法 SpringBoot @component的作用 介绍 举例说明 总结 @Componet注解注入失败 问题描述 在springboot程序编写中,明明给Person类加了@Component注解,容器却显示找不到Person类的Bean对象. 网上找了很多种常规解法,发现都无效,后来才意识到,可能是包扫描的问题,由于当时我的主程序是放在一个与主程序同名的文件夹下,根据默认包扫描规则–扫描主程序所在包及其所有子包中的类,那么方在domai

  • SpringBoot @Autowired注解注入规则介绍

    目录 @Autowired注解注入规则 验证 小结一下 @Autowired注解无法自动注入的错误 @Autowired注解注入规则 @Autowired - 注入默认根据类型,匹配不到则根据bean名字 Spring中注解方式的默认beanName生成规则: 在Spring中,当我们配置一个bean的时候,可以不指定name,这样的话,Spring会生成一个默认的beanName 1. 驼峰形式类名首字母小写:UserService--userService 2. 特殊情况--当类名的首字母和

  • SpringBoot通过注解注入Bean的几种方式解析

    目录 1.背景 xml扫描包的方式 2.通过注解注入的一般形式 2.1.Bean类 2.2.Configuration类 2.3.Test类 3.通过构造方法注入Bean 3.1.Bean类 3.2.AnotherBean类 3.3.Configuration类 4.通过set方法注入Bean 4.1.MyBean类 4.2.Configuration类和Test类 5.通过属性去注入Bean 6.通过List注入Bean 6.1.MyBeanList类 6.2.MyConfiguration类

  • springboot使用@value注入配置失败的解决

    目录 springboot使用@value注入配置文件失败 问题解决方向一 问题解决方向二 @Value注入失败,注入值为null的问题 大概就是下面这样 结果不知道为什么,@Value注入一直为空?? 原因如下 解决办法 springboot使用@value注入配置文件失败 遇到的问题原因是:类中注入对象不能用static. 问题解决方向一 1.改为如图示,去掉static 问题解决方向二 1.仍然定义静态变量,但在其set方法上使用@Value进行赋值 2.仍然定义静态变量,同时定义一个普通

  • java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    # java-SpringBoot自定义参数解析器实现对象自动注入 解析器逻辑流程图表 后台解析注解的解析器 首先,我在java后台编写了一个解析器,代码如下 import com.ruoyi.framework.interceptor.annotation.LoginUser; import com.ruoyi.project.WebMoudle.WebUser.domain.WebUser; import com.ruoyi.project.WebMoudle.WebUser.service

  • springboot多模块化整合mybatis,mapper自动注入失败问题及解决

    目录 springboot多模块化整合mybatis,mapper自动注入失败 问题 解决 springboot mapper注入失败的一种原因 具体情况是 解决办法 springboot多模块化整合mybatis,mapper自动注入失败 问题 启动类添加@MapperScan或@ComponentScan,mapper类添加@Mapper或@Repository ==> Consider defining a bean of type 'com.ten.mapper.UserMapper'

  • spring+springmvc整合mabytis时mapper注入失败问题解决方法

    好久不搭架构,今天使用spring+springmvc整合mabytis的时候,坑爹的两个问题发生了. 花了一晚上解决这两个问题.现在将错误经验总结分享下,避免以后遇到坑继续往里跳. 1. 单元测试的时候,单元测试失败报错: A ServletContext is required to configure default servlet handling 十月 28, 2016 9:03:33 下午 org.springframework.context.support.GenericAppl

  • 解决Springboot @Autowired 无法注入问题

    特别提醒:一定要注意文件结构 WebappApplication 一定要在包的最外层,否则Spring无法对所有的类进行托管,会造成@Autowired 无法注入. 1. 添加工具类获取在 Spring 中托管的 Bean (1)工具类 package com.common; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionE

  • springboot @ConditionalOnMissingBean注解的作用详解

    @ConditionalOnMissingBean,它是修饰bean的一个注解,主要实现的是,当你的bean被注册之后,如果而注册相同类型的bean,就不会成功,它会保证你的bean只有一个,即你的实例只有一个,当你注册多个相同的bean时,会出现异常,以此来告诉开发人员. 代码演示 @Component public class AutoConfig { @Bean public AConfig aConfig() { return new AConfig("lind"); } @B

随机推荐