栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

 
 
 

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

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

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

比如我在 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 {
	protected Logger logger = LogManager.getLogger(getClass());
	@Override 
	  public void setApplicationContext(ApplicationContext ctx) throws BeansException {
		logger.info("rnrnrnrn1 => StartupListener.setApplicationContext");
	}
	@Override 
	  public void setServletContext(ServletContext context) {
		logger.info("rnrnrnrn2 => StartupListener.setServletContext");
	}
	@Override 
	  public void afterPropertiesSet() throws Exception {
		logger.info("rnrnrnrn3 => StartupListener.afterPropertiesSet");
	}
	@Override 
	  public void onApplicationEvent(ContextRefreshedEvent event) {
		logger.info("rnrnrnrn4.1 => MyApplicationListener.onApplicationEvent");
		logger.info("rnrnrnrn4.1 => " + event.getApplicationContext().getParent());
		logger.info("rnrnrnrn4.1 => " + event.getApplicationContext().getDisplayName());
		if (event.getApplicationContext().getParent() == null) {
			logger.info("rnrnrnrn4.2 => MyApplicationListener.onApplicationEvent");
		} else{
			logger.info("rnrnrnrn4.4 => " + event.getApplicationContext().getParent().getDisplayName());
		}
		if (event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")){
			logger.info("rnrnrnrn4.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的两种配置容器等,有什么问题可以随时留言,小编会及时回复大家的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/143475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号