spring配置扫描多个包问题解析

 更新时间:2017年10月30日 14:12:22   作者:微wx笑  
这篇文章主要介绍了spring配置扫描多个包问题解析,具有一定参考价值,需要的朋友可以了解下。

spring 配置扫描多个包,有时候我们希望不同功能类型的包放在不同的包下,这就需要

<!-- 自动扫描该包,使 SpringMVC 为包下用了@controller注解的类是控制器 --> 
<context:component-scan base-package="com.weixiao.ssmcleardb.controller" /> 
<context:component-scan base-package="com.weixiao.listener" /> 

有时候我们可能遇到奇怪的问题,

新建了一个包,在这个包下面新建了一个类,也添加了注解,但启动的时候就是扫描不到,而其它的类又正常!

这就是你新建的包没有配置为自动扫描的原因。

比如我在 com.weixiao.listener 包下新建的一个类:

package com.weixiao.listener;
import javax.servlet.ServletContext;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;
@Component("StartupListener") 
public class StartupListener implements ApplicationContextAware, ServletContextAware, InitializingBean, 
    ApplicationListener<ContextRefreshedEvent> {
	protected Logger logger = LogManager.getLogger(getClass());
	@Override 
	  public void setApplicationContext(ApplicationContext ctx) throws BeansException {
		logger.info("\r\n\r\n\r\n\r\n1 => StartupListener.setApplicationContext");
	}
	@Override 
	  public void setServletContext(ServletContext context) {
		logger.info("\r\n\r\n\r\n\r\n2 => StartupListener.setServletContext");
	}
	@Override 
	  public void afterPropertiesSet() throws Exception {
		logger.info("\r\n\r\n\r\n\r\n3 => StartupListener.afterPropertiesSet");
	}
	@Override 
	  public void onApplicationEvent(ContextRefreshedEvent event) {
		logger.info("\r\n\r\n\r\n\r\n4.1 => MyApplicationListener.onApplicationEvent");
		logger.info("\r\n\r\n\r\n\r\n4.1 => " + event.getApplicationContext().getParent());
		logger.info("\r\n\r\n\r\n\r\n4.1 => " + event.getApplicationContext().getDisplayName());
		if (event.getApplicationContext().getParent() == null) {
			logger.info("\r\n\r\n\r\n\r\n4.2 => MyApplicationListener.onApplicationEvent");
		} else{
			logger.info("\r\n\r\n\r\n\r\n4.4 => " + event.getApplicationContext().getParent().getDisplayName());
		}
		if (event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")){
			logger.info("\r\n\r\n\r\n\r\n4.3 => MyApplicationListener.onApplicationEvent");
		}
	}
}

关于 component-scan,我们来看 spring framework 开发手册中的一段话:

Spring 2.5引入了更多典型化注解(stereotype annotations): @Component、@Service和 @Controller。@Component是所有受Spring管理组件的通用形式;而@Repository、@Service和 @Controller则是@Component的细化,用来表示更具体的用例(例如,分别对应了持久化层、服务层和表现层)。也就是说,你能用@Component来注解你的组件类,但如果用@Repository、@Service 或@Controller来注解它们,你的类也许能更好地被工具处理,或与切面进行关联。例如,这些典型化注解可以成为理想的切入点目标。当然,在Spring Framework以后的版本中, @Repository、@Service和 @Controller也许还能携带更多语义。如此一来,如果你正在考虑服务层中是该用@Component还是@Service,那@Service显然是更好的选择。同样的,就像前面说的那样, @Repository已经能在持久化层中进行异常转换时被作为标记使用了。” 

总结

以上就是本文关于spring配置扫描多个包问题解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Spring配置使用之Bean生命周期详解浅谈Spring的两种配置容器等,有什么问题可以随时留言,小编会及时回复大家的。

相关文章

  • Java输入流Scanner/BufferedReader使用方法示例

    Java输入流Scanner/BufferedReader使用方法示例

    这篇文章主要介绍了Java输入流Scanner/BufferedReader使用方法,大家看示例吧
    2013-11-11
  • java获取当前时间并格式化代码实例

    java获取当前时间并格式化代码实例

    这篇文章主要介绍了java获取当前时间并格式化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java中try catch的使用和如何抛出异常问题

    Java中try catch的使用和如何抛出异常问题

    这篇文章主要介绍了Java中try catch的使用和如何抛出异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • springboot启动脚本start.sh和停止脚本 stop.sh的详细教程

    springboot启动脚本start.sh和停止脚本 stop.sh的详细教程

    这篇文章主要介绍了springboot启动脚本start.sh和停止脚本 stop.sh的详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java多线程volatile内存语义解析

    java多线程volatile内存语义解析

    这篇文章主要介绍了java多线程volatile内存语义解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 基于SSM实现学生管理系统

    基于SSM实现学生管理系统

    这篇文章主要为大家详细介绍了基于SSM实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • springboot整合shiro的过程详解

    springboot整合shiro的过程详解

    Shiro 是一个强大的简单易用的 Java 安全框架,主要用来更便捷的 认证,授权,加密,会话管理,这篇文章给大家详细介绍Shiro 工作原理及架构图,通过实例图文相结合给大家介绍的非常详细,需要的朋友参考下吧
    2021-10-10
  • Java使用easyExcel批量导入数据详解

    Java使用easyExcel批量导入数据详解

    这篇文章主要介绍了Java使用easyExcel批量导入数据详解,通常我们会提供一个模板,此模块我们可以使用easyExcel导出数据生成的一个Excel文件当作模板,提供下载链接,用户在该文件内填入规定的数据格式以后可以批量导入数据到数据库中,需要的朋友可以参考下
    2023-08-08
  • SpringBoot如何获取application.properties中自定义的值

    SpringBoot如何获取application.properties中自定义的值

    这篇文章主要介绍了SpringBoot获取application.properties中的自定义的值,目录结构文件代码给大家列举的非常详细,需要的朋友可以参考下
    2021-09-09
  • jvm之java类加载机制和类加载器(ClassLoader)的用法

    jvm之java类加载机制和类加载器(ClassLoader)的用法

    这篇文章主要介绍了jvm之java类加载机制和类加载器(ClassLoader)的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论