千家信息网

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

发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章将为大家详细讲解有关spring配置不扫描service层的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring配置不扫描service层原
千家信息网最后更新 2025年11月09日spring配置不扫描service层的原因是什么

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

spring配置不扫描service层原因

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

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

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文件上的时间,使得配置文件显得干净,整洁,便于维护。

这种机制的工作步骤是:

1.配置需要扫描的类;

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

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

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

自动扫描组件的使用

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

如下:

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

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

1. context:include-filter 指定扫描位置

2. 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层的原因是什么"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

组件 注解 配置 容器 文件 方法 名称 原因 作用 测试 属性 篇文章 类名 问题 相同 对象 情况 更多 机制 类型 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 两个数据库共享出现的问题 浪潮机架式服务器选哪家 安庆电力软件开发定制公司 金手指数据库编辑器v1.3.9 分布式数据库国外研究情况 网络安全和舆情应对党校 宁波海曙区戴尔机架式服务器 java下软件开发 数据库中创建默认日期 深圳南湾区服务器 光遇总是服务器失败 兼职软件开发求职 阿里云服务器管理员权限 服务器强制使用加密通道 服务器怎么检测连点器 共和国网络安全法开始施行的时间 网络安全也是国家安全征文 软件开发人员顺口溜 湖南虚拟服务器管理软件服务器 福州市网络安全个人承诺书 网络技术给企业带来的挑战 语音服务器连接失败金铲铲 上海数据网络技术代理商 邯郸2u双路机架式服务器 网络安全人员的配备情况 电子商务考研能不能考网络安全 江苏商城软件开发 海洋馆管理系统数据库 加强和改进网络安全工作 四川学习软件开发中心
0