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

所属分类: 软件编程 / java 阅读数: 23
收藏 0 赞 0 分享

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基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多