我的编程空间,编程开发者的网络收藏夹
学习永远不晚

spring配置不扫描service层的原因是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

spring配置不扫描service层的原因是什么

这篇文章将为大家详细讲解有关spring配置不扫描service层的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

spring配置不扫描service层原因

我将contoller给springmvc进行扫描,然后其余所有交给spring扫描

spring配置不扫描service层的原因是什么

spring配置不扫描service层的原因是什么

然后发现service层的EmployeeService并没有扫描到出现以下问题

spring配置不扫描service层的原因是什么

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘springmvc.crud.service.EmployeeService’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)… 39 more

最终发现原因是spring配置文件里面context:exclude-filter是不要加use-default-filters的,而context:include-filter是需要加的

找了好久问题!!!

spring配置自动扫描原理介绍

Spring利用IOC容器将所有的bean进行有秩序的管理维护,而实际项目中不可能在xml文件中创建bean,而是利用了Spring的组件自动扫描机制,通过在classpath自动扫描的方式把组件纳入到Spring容器中。这大大减少了程序员在配置XML文件上的时间,使得配置文件显得干净,整洁,便于维护。

这种机制的工作步骤是:

配置需要扫描的类;

在需要被纳入Spring容器的类上加上相应的注解;

Spring在类路径下寻找标注了注解的类,并把这些类纳入Spring容器中管理。

它的作用是和在XML文件中使用节点配置组件是一样的。

自动扫描组件的使用

第一步:配置applicationContext.xml文件;

如下:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd"><!-- 打开Spring组件自动扫面,并配置要扫描的基本包 --><context:component-scan base-package="com.springtest"></context:component-scan></beans>

注:节点用于通知Spring容器扫描组件,base-package属性用于指定将要被扫描的组件所在的包名称。

在这里说明一下:context:component-scan有一个use-default-filters属性,默认为true,这就意味着会扫描指定包base-package下的全部的标有@Component@Service,@Repository的类,并注册成bean.

context:include-filter 指定扫描位置

context:exclude-filter 指定的不扫描

use-default-filters=”true”时,此时指定的include-filter不会起到作用,只有当

use-default-filters=”false”时,context:exclude-filter指定的不扫描,context:include-filter指定的扫描

第二步:为需要被扫描的类添加相应的注解

注解的类型有以下几种:

  • @Service 用于标注业务层组件;

  • @Repository 用于标注数据访问层组件;

  • @Controller 用于标注控制层组件(如:Struts中的action)

  • @Component 表示泛型组件,当组件不好归类的时候,我们可以使用这个组件进行注解。

第三步:当为类添加完成注解后,我们需要测试相应的组件是否被纳入Spring容器,所以我们需要测试组件是否被扫描

如下:

@Testpublic void testAddUser(){UserBiz userBiz = (UserBiz)context.getBean("userBizImpl");System.out.println(userBiz);}

如果输出不为空,则说明测试类已经被扫描并且纳入了Spring容器。

细节问题总结

1.当我们进行测试时,用ApplicationContext对象的getBean()方法寻找组件。

在之前的配置文件中我们会用标签的id属性去定义,在使用注解后怎样获得组建的id呢?

在这种情况下,Spring会将被标注注解的类名拿到,然后再将该类名的第一个字母变为小写,放到getBean()方法中。如:UserBizImpl类的组件Id就会是userBizImpl,获取时为context.getBean(“userBizImpl”);

那么,我们在使用注解时可以自定义组件的Id吗?

当然可以。

我们需要在为相应的类添加注解时,在注解之后添加自定义的类名,例如:

@Service("userBiz")public class UserBizImpl implements UserBiz {……}

当我们在获取该组件时,为context.getBean(“userBiz);

2.在配置文件中我们可以对组件(bean)的作用域范围进行设置,它的默认值是单例模式,那么在添加注解的情况下,我们怎样设置组件的作用域范围呢?

我们可以直接在为类添加注解的同时,运用另一个注解@Scope(“prototype”)来设置,如下

@Service(“userBiz”)@Scope(“prototype”)public class UserBizImpl implements UserBiz {……}

3.在使用注解时,为组件设置初始化和销毁方法

在添加注解的相应的类中,如果想初始化或销毁某个方法,我们可以直接在方法上添加注解,如下:

@PostConstructpublic void addItem() {System.out.println("初始化方法");}@PreDestroypublic void testItem() {System.out.println("释放资源");}

4.在使用Spring自动扫描组件后,怎样进行依赖注入?

运用注解@Resource和@Autowired,并为依赖对象设置名称,例如:

@Resource(name="userDao")private UserDAO userDao = null;

首先它会根据名称去找Spring自动扫描的并加入到Spring容器的组件(bean),如果有相同的名称,则进行依赖注入,如果没有相同的名称。则会根据类型区寻找组件。

关于“spring配置不扫描service层的原因是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

spring配置不扫描service层的原因是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

spring配置不扫描service层的原因是什么

这篇文章将为大家详细讲解有关spring配置不扫描service层的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring配置不扫描service层原因我将contoller给springm
2023-06-29

配置文件php.ini不生效是什么原因

配置文件“php.ini”不生效的原因:1、修改配置文件后,没有重新加载“php.ini”配置文件,只需重启服务,重新加载配置文件即可;2、存在多个“php.ini”配置文件;3、“php.ini”文件中的配置被其他文件中的配置覆盖了。
2020-07-19

spring boot自动配置的原理是什么

Spring Boot的自动配置原理是基于条件注解和Spring的条件注解机制实现的。在Spring Boot中,自动配置是通过在类上使用`@Conditional`注解来进行条件判断的。`@Conditional`注解可以与其他条件注解组
2023-08-31

ps中画笔描边路径用不了的原因是什么

这篇文章主要介绍了ps中画笔描边路径用不了的原因是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原因分析:1、画笔的颜色与画布的颜色相同。2、看看你画笔的属性。流量和透明
2023-06-15

vlookup函数匹配不出来的原因是什么

今天小编给大家分享一下vlookup函数匹配不出来的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vlookup函
2023-06-30

jdk环境变量配置显示不是内部命令的原因是什么

这篇“jdk环境变量配置显示不是内部命令的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“jdk环境变量配置显示不是
2023-07-01

测评亚马逊服务器配置错误的原因是什么意思

错误配置文件:配置文件是在服务器上运行的脚本和应用程序的路径。如果配置文件存在错误或不正确,服务器将无法正常工作。缺少必要的库或模块:如果服务器上没有所需的库或模块,那么它将无法正常工作。这可能会导致应用程序无法正常运行或产生不正确的结果。服务器硬件问题:如果服务器硬件出现问题,例如内存泄漏、磁盘空间不足等,则可能会导致配置文件错误。操作系统问题:操作系统可能会出现错误,例如内存问题、权限问题、安...
2023-10-27

轻量应用服务器性能不好的原因是什么呢苹果12怎么设置

轻量应用服务器性能不好可能是因为以下原因:服务器配置不当:有些应用程序可能依赖于服务器资源,如CPU、内存、存储器等。当应用程序配置不正确时,服务器可能无法提供适当的性能或响应。应用程序的代码错误:如果应用程序使用了不正确的库或API调用,那么服务器无法正确地处理和响应这些调用,从而使应用程序性能下降。应用程序的部署问题:如果应用程序使用了不同的部署配置,那么服务器无法正确地处理不同类型
2023-10-26

linux上配置jdk时java命令提示没有此文件或文件夹的原因是什么

这篇文章将为大家详细讲解有关linux上配置jdk时java命令提示没有此文件或文件夹的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。出现这个问题可能有以下几种原因:1、对该文件没有执行的权限。
2023-06-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录