开发者

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

开发者 https://www.devze.com 2023-03-07 10:27 出处:网络 作者: 不来的恩特
目录@Componet注解注入失败问题描述解决方法解读@component的作用介绍举例说明 总结@Componet注解注入失败
目录
  • @Componet注解注入失败
    • 问题描述
    • 解决方法
  • 解读@component的作用
    • 介绍
    • 举例说明 
  • 总结

    @Componet注解注入失败

    问题描述

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

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

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

    解决方法

    在主程序上添加Componet注解

    @ComponentScan("com.example")

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

    解读@component的作用

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

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

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

    介绍

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

    @Controller 控制器(注入服务)

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

    @Service 服务(注入dao)

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

    @Repository(实现dao访问)

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

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

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

    举例说明 

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

    格式:

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

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

    下面写这个是引入component的扫描组件编程客栈

    <context:component-scan b开发者_Go教程ase-package=”com.mmnc.*”>

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

    共同点:

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

    总结

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

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号