电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Spring注解開發(fā)@Bean和@ComponentScan使用案例

瀏覽:4日期:2023-08-15 09:49:48

組件注冊

用@Bean來注冊

搭建好maven web工程

pom加入spring-context,spring-core等核心依賴

創(chuàng)建實例類com.hjj.bean.Person, 生成getter,setter方法

public class Person { private String name; private int age;}

創(chuàng)建com.hjj.config.MainConfig

@Configuration //告訴spring是一個配置類public class MainConfig { // 給容器中注冊一個Bean,類行為返回值的類型,id默認是用方法名作為id @Bean('mikePerson') public Person person(){ return new Person('mike',20); }}

主測試類

public class MainTest { public static void main(String[] args) { AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); Person bean = applicationContext.getBean(Person.class); System.out.println(bean); String[] beanNamesForType = applicationContext.getBeanNamesForType(Person.class); for (String type : beanNamesForType) { System.out.println(type); //配置類中的方法名,注意:通過修改配置類的@bean value也可以修改 } }}

@ComponentScan包掃描

配置類中MainConfig.java

@Configuration //告訴spring是一個配置類@ComponentScan('com.hjj') // 掃描包的路徑public class MainConfig { // 給容器中注冊一個Bean,類行為返回值的類型,id默認是用方法名作為id @Bean('mikePerson') public Person person(){ return new Person('mike',20); }}

新建測試的com.hjj.controller,service,dao

@Controllerpublic class BookController {}@Repositorypublic class BookDao {}@Servicepublic class BookService {}

單元測試

@Test public void test01(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); //獲取所有組件 for (String beanDefinitionName : beanDefinitionNames) { System.out.println(beanDefinitionName); } }

ComponentScan字段,有includeFilter(),和excludeFilter() 只包含或排除某些組件

@ComponentScan(value = 'com.hjj',excludeFilters={@Filter(type=FilterType.ANNOTATION,classes={Controller.class,Service.class})})@ComponentScan(value = 'com.hjj',includeFilters={@Filter(type=FilterType.ANNOTATION,classes={Controller.class,Service.class})},userDefaultFilters=false)

// excludeFilter源碼ComponentScan.Filter[] excludeFilters() default {};

// ComponentScan.Filter源碼@Retention(RetentionPolicy.RUNTIME)@Target({})public @interface Filter { FilterType type() default FilterType.ANNOTATION; @AliasFor('classes') Class<?>[] value() default {}; @AliasFor('value') Class<?>[] classes() default {}; String[] pattern() default {};}

@ComponentScan被@Repeatable(ComponentScans.class),可以重復(fù)寫,用來寫不同的執(zhí)行策略。

@ComponentScans 里面可以放ComponentScan類型的值

@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE})@Documentedpublic @interface ComponentScans { ComponentScan[] value();}

FilterType

public enum FilterType { ANNOTATION, // 按注解掃描 ASSIGNABLE_TYPE, // 按給定的類型 ASPECTJ, // 可以用aspectJ表達式 REGEX, // 正則表達式 CUSTOM; // 自定義規(guī)則 private FilterType() { }}

ASSIGNABLE_TYPE

@ComponentScan(value = 'com.hjj',includeFilters ={@ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE,classes = {BookService.class})})// config配置如上注解后 bookservice,可以被發(fā)現(xiàn) @Test public void demoTest1(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class); String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames(); for (String beanDefinitionName : beanDefinitionNames) { System.out.println(beanDefinitionName); } }

Custom 可以自定義配置或?qū)憳I(yè)務(wù)掃描類的信息,match返回true則是加到組件

1.復(fù)寫TypeFilter的match方法

public class MyTypeFilter implements TypeFilter { /** * * @param metadataReader 讀取到的當前正在掃描的類的信息 * @param metadataReaderFactory 可以獲取到其他任何類信息 * @return * @throws IOException */ @Override public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException { // 獲取當前類注解的信息 AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata(); // 獲取當前正在掃描類的信息 ClassMetadata classMetadata = metadataReader.getClassMetadata(); // 獲取當前類資源(類的路徑等) Resource resource = metadataReader.getResource(); String className = classMetadata.getClassName(); System.out.println('className:' + className); return false; }}

2. 加上注解

@Configuration //告訴spring是一個配置類@ComponentScan(value = 'com.hjj',includeFilters ={ @ComponentScan.Filter(type=FilterType.CUSTOM,classes = {MyTypeFilter.class})}, useDefaultFilter=false)public class MainConfig {}@Testpublic void test01(){AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();for (String beanDefinitionName : beanDefinitionNames) {System.out.println(beanDefinitionName);}}

結(jié)果

className:com.hjj.test.IOCTestclassName:com.hjj.MainTestclassName:com.hjj.bean.PersonclassName:com.hjj.config.MyTypeFilterclassName:com.hjj.demo.DemoTestclassName:com.hjj.demo.EmployeeclassName:com.hjj.demo.Managerorg.springframework.context.annotation.internalConfigurationAnnotationProcessororg.springframework.context.annotation.internalAutowiredAnnotationProcessororg.springframework.context.annotation.internalCommonAnnotationProcessororg.springframework.context.event.internalEventListenerProcessororg.springframework.context.event.internalEventListenerFactorymainConfig

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 洗石机-移动滚筒式,振动,螺旋,洗矿机-青州冠诚重工机械有限公司 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 分子蒸馏设备(短程分子蒸馏装置)_上海达丰仪器 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 安规电容|薄膜电容|陶瓷电容|智旭JEC安规电容厂家 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 阜阳成人高考_阜阳成考报名时间_安徽省成人高考网 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 2025第九届世界无人机大会| 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | SMC-SMC电磁阀-日本SMC气缸-SMC气动元件展示网 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 浴室柜-浴室镜厂家-YINAISI · 意大利设计师品牌 | 咿耐斯 |-浙江台州市丰源卫浴有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 免费分销系统 — 分销商城系统_分销小程序开发 -【微商来】 | 金属波纹补偿器厂家_不锈钢膨胀节价格_非金属伸缩节定制-庆达补偿器 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 酵素生产厂家_酵素OEM_酵素加盟_酵素ODM_酵素原料厂家_厦门益力康 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 彩超机-黑白B超机-便携兽用B超机-多普勒彩超机价格「大为彩超」厂家 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | led全彩屏-室内|学校|展厅|p3|户外|会议室|圆柱|p2.5LED显示屏-LED显示屏价格-LED互动地砖屏_蕙宇屏科技 | 魔方网-培训咨询服务平台| 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 |