怎么使用spring中ponentScan自动扫描并指定扫描规则
这篇文章主要介绍了怎么使用spring中ponentScan自动扫描并指定扫描规则的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用spring中ponentScan自动扫描并指定扫描规则文章都会有所收获,下面我们一起来看看吧。
1.使用注解配置包扫描
1.1.创建相关类
分别创建BookDao、BookService、BookServiceImpl以及BookController这三个类,并在这三个类中分别添加@Repository、@Service、@Controller注解
BookDao
package .tianxia.springannotation.dao;importorg.springframework.stereotype.Repository;/***BookDao*@authorliqb*@date2023-04-2116:37**///名字默认是类名首字母小写@RepositorypublicclassBookDao{}
BookService
package .tianxia.springannotation.service;/***BookService*@authorliqb*@date2023-04-2116:38**/publicinterfaceBookService{}
BookServiceImpl
package .tianxia.springannotation.service.impl;import .tianxia.springannotation.service.BookService;importorg.springframework.stereotype.Service;/***BookServiceImpl*@authorliqb*@date2023-04-2116:38**/@ServicepublicclassBookServiceImplimplementsBookService{}
BookController
package .tianxia.springannotation.controller;importorg.springframework.stereotype.Controller;/***BookController*@authorliqb*@date2023-04-2116:39**/@ControllerpublicclassBookController{}
1.2.SpringBoot启动类默认就有配置ponentScan
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfigurationponentScan(excludeFilters={@Filter(type=FilterType.CUSTOM,classes=TypeExcludeFilter.class),@Filter(type=FilterType.CUSTOM,classes=AutoConfigurationExcludeFilter.class)})public@interfaceSpringBootApplication{}
1.3.查看IOC中的bean的名称
package .tianxia.springannotation;import .tianxia.springannotation.config.MainConfig;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.context.annotation.AnnotationConfigApplicationContext;importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;/*** ponentScanTest*@authorliqb*@date2023-04-2116:45**/@SpringBootTest@RunWith(SpringJUnit4ClassRunner.class)publicclass ponentScanTest{/***查看IOC容器中有哪些bean*@authorliqb*@date2023-04-2116:45*/@Testpublicvoidtest(){AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext(SpringAnnotationApplication.class);//我们现在就来看一下IOC容器中有哪些bean,即容器中所有bean定义的名字String[]definitionNames=applicationContext.getBeanDefinitionNames();for(Stringname:definitionNames){System.out.println(name);}}}
2.扫描时排除注解标注的类
在注解类上通过ponentScan注解的excludeFilters()方法
package .tianxia.springannotation;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.annotationponentScan;importorg.springframework.context.annotation.FilterType;importorg.springframework.stereotype.Controller;importorg.springframework.stereotype.Service;/***启动类*@authorliqb*@date2023-04-2116:12**/@SpringBootApplication//value指定要扫描的包ponentScan(value=".tianxia.springannotation",excludeFilters={/**type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等*classes:除了@Controller和@Service标注的组件之外,IOC容器中剩下的组件我都要,即相当于是我要排除@Controller和@Service这俩注解标注的组件。*/ponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class,Service.class})})publicclassSpringAnnotationApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringAnnotationApplication.class,args);}}
3.扫描时只包含注解标注的类
在注解类中的includeFilters()方法来指定Spring在进行包扫描时,只包含哪些注解标注的
这里需要注意的是,当我们使用includeFilters()方法来指定只包含哪些注解标注的类时,需要禁用掉默认的过滤规则
package .tianxia.springannotation;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.annotationponentScan;importorg.springframework.context.annotation.FilterType;importorg.springframework.stereotype.Controller;/***启动类*@authorliqb*@date2023-04-2116:12**/@SpringBootApplication//value指定要扫描的包ponentScan(value=".tianxia.springannotation",includeFilters={/**type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等*classes:我们需要Spring在扫描时,只包含@Controller注解标注的类*/ponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class})},useDefaultFilters=false)publicclassSpringAnnotationApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SpringAnnotationApplication.class,args);}}
4.重复注解
ponentScans({ponentScan(value=".tianxia.springannotation",includeFilters={/**type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等*classes:我们需要Spring在扫描时,只包含@Controller注解标注的类*/ponentScan.Filter(type=FilterType.ANNOTATION,classes={Controller.class})},useDefaultFilters=false),ponentScan(value=".tianxia.springannotation",includeFilters={/**type:指定你要排除的规则,是按照注解进行排除,还是按照给定的类型进行排除,还是按照正则表达式进行排除,等等*classes:我们需要Spring在扫描时,只包含@Controller注解标注的类*/ponentScan.Filter(type=FilterType.ANNOTATION,classes={Service.class})},useDefaultFilters=false)})
关于“怎么使用spring中ponentScan自动扫描并指定扫描规则”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用spring中ponentScan自动扫描并指定扫描规则”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注主机评测网行业资讯频道。
上一篇:Go语言时间处理必备技巧有哪些
webacc.exe是什么文件?webacc.exe是不是病毒
WINSYS.vbs是什么文件?WINSYS.vbs是不是病毒
winssh.exe是什么文件?winssh.exe是不是病毒
wt.exe是什么文件?wt.exe是不是病毒
winsysetm.exe是什么文件?winsysetm.exe是不是病毒
winstrve.exe是什么文件?winstrve.exe是不是病毒
winsysupd7.exe是什么文件?winsysupd7.exe是不是病毒
winsysupd.exe是什么文件?winsysupd.exe是不是病毒
winsysupd2.exe是什么文件?winsysupd2.exe是不是病毒
winsysupd8.exe是什么文件?winsysupd8.exe是不是病毒