范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java编程Springclasspath扫描和组件管理(上)

  "这里是 offer 学院,帮你轻松 拿offer"
  嗨~大家好,我是学长!今天的你过得还好吗?
  - 2022.11.30 -
  本文章为【Spring】classpath扫描和组件管理相关知识,下边将对@Component  和及其派生出的其他注解,自动检测类和注册beanDifination,组件命名,为自动检测组件提供scope,使用过滤器自定义扫描,在组件中定义Bean元数据等进行详尽介绍~
  本节我们可以通过【扫描类路径】隐式检测候选组件。 【候选组件】指的是通过扫描筛选并在容器中注册了相应beanDifination的类。这样就不需要使用XML来执行bean注册。 相反,你可以使用注解(例如,【@Component  】)。从Spring 3.0开始,Spring JavaConfig 项目提供的许多特性都是核心Spring框架的一部分。 这允许你使用Java而不是使用传统的XML文件来定义bean。
  一、@Component
  @Component 和及其派生出的其他注解:@Component  是任何spring管理组件的通用注解。@Repository 、@Service 和@Controller 是【@Component 】用于更具体用例的注解(分别在持久性、服务和表示层中)。这些注解对于我们后期对特定bean进行批量处理时是有帮助的。
  二、检测类和注册
  自动检测类和注册beanDifination:
  Spring可以自动检测类的信息,并将相应的【BeanDefinition】实例注册到【ApplicationContext】中。 例如,以下两个类适合这样的自动检测:@Service public class SimpleMovieLister {      private MovieFinder movieFinder;      public SimpleMovieLister(MovieFinder movieFinder) {         this.movieFinder = movieFinder;     } }@Repository public class JpaMovieFinder implements MovieFinder {     // implementation elided for clarity }
  要自动检测这些类并注册相应的bean,你需要将【@ComponentScan 】添加到你的【 @Configuration 】类中,其中【basePackages 】属性是这两个类的公共父包。说人话就是:指定一个包名,自动扫描会检测这个包及其子包下的所有类信息。@Configuration @ComponentScan(basePackages = "org.example") public class AppConfig  {     // ... }
  为简单起见,前面的示例可能使用了注解的value属性 (即@ComponentScan ("org.example") )。
  当然我们可以使用以下XML代替,他们是等效的:<?xml version="1.0" encoding="UTF-8"?>        
  注意:   的使用会隐式启用  ,当使用  时,通常不需要包含 元素。
  三、组件命名
  组件命名:
  当组件作为扫描过程的一部分被自动检测时,它的bean名是由该扫描器所知道的"BeanNameGenerator"策略生成的。
  默认情况下,会使用【@Component 】, 【@Repository 】,【@Service 】和【@Controller 】注解的value值,因此将该名称会提供给相应的beanDefination。 如果你的注解不包含任何名称属性,会有默认bean名称生成器将返回【非首字母大写的非全限定类名】。
  例如,如果检测到以下组件类,则名称为【myMovieLister 】和【movieFinderImp 】,这个和xml自动生成的标识符名称不同:@Service("myMovieLister") public class SimpleMovieLister {     // ... }@Repository public class MovieFinderImpl implements MovieFinder {     // ... }
  四、Scope
  为自动检测组件提供scope:
  与spring管理的组件一样,自动检测组件的默认和最常见的作用域是"单例"。 然而,有时你需要一个不同的范围,可以由" @Scope " 注解指定。 你可以在注解中提供作用域的名称,如下面的示例所示:@Scope("prototype") @Repository public class MovieFinderImpl implements MovieFinder {     // ... }
  五、过滤器
  使用过滤器自定义扫描:
  默认情况下,带有【@Component 】、【@Repository 】、【@Service 】、【@Controller 】、【@Configuration 】注解的类是一定能被筛选器选中并进行注册的候选组件。 但是,你可以通过应用自定义过滤器来修改和扩展此行为,自由定制筛选哪些或不包含那些组件。 将它们作为@ComponentScan 注解的includeFilters  或 excludeFilters  属性添加(或者作为XML配置中’   ‘或’   ‘元素的子元素)。
  每个筛选器元素都需要’ type ‘和’ expression "属性。 下表描述了过滤选项:
  下面的示例显示了忽略所有【@Repository 】注解,而使用【stub 】包下的类进行替换:@Configuration @ComponentScan(basePackages = "org.example",         includeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Stub.*Repository"),         excludeFilters = @Filter(Repository.class)) public class AppConfig {     // ... }
  下面的例子显示了等效的XML:                             
  【小知识】
  你还可以通过在注解上设置useDefaultFilters=false  或通过提供use-default-filters="false"  作为  元素的属性来禁用默认过滤器。 这将有效地禁用使用【@Component 】、【@Repository  】、【@Service 】、【 @Controller 】、【@Configuration 】注解或元注解的类的自动检测。
  六、定义Bean
  在组件中定义Bean元数据:
  Spring组件还可以向容器提供beanDifination元数据。 可以使用 @Bean 注解来实现这一点。@Component public class FactoryMethodComponent {      @Bean     @Qualifier("public")     public TestBean publicInstance() {         return new TestBean("publicInstance");     }      public void doWork() {         // Component method implementation omitted     } }
  前面的类是一个Spring组件,它的【doWork() 】方法中包含特定于应用程序的代码。 然而,它还提供了一个beanDifination,该beanDifination有一个引用方法【public Instance() 】的工厂方法。 【@Bean注解 】标识工厂方法,通过【@Qualifier 】注解标识一个限定符值。 其他可以指定的方法级注解有【@Scope  】, 【@Lazy  】等。
  下面的例子展示了如何做到这一点:@Component public class FactoryMethodComponent {      private static int i;      @Bean     @Qualifier("public")     public TestBean publicInstance() {         return new TestBean("publicInstance");     }      // use of a custom qualifier and autowiring of method parameters     @Bean     protected TestBean protectedInstance(             @Qualifier("public") TestBean spouse,             @Value("#{privateInstance.age}") String country) {         TestBean tb = new TestBean("protectedInstance", 1);         tb.setSpouse(spouse);         tb.setCountry(country);         return tb;     }      @Bean     private TestBean privateInstance() {         return new TestBean("privateInstance", i++);     }  }
  ✅Okey~ 今天的Spring教程内容就到这里!下期我们将继续讲解Spring的基于Java的容器配置,BeanFactory和FactoryBean,环境抽象,事件机制等进行详尽介绍~
  我们下期再见!
  END
  文案编辑|offer学长
  文案配图|offer学长
  内容由:小新要变强(博主)分享

灵耀Pro162022评测顶级OLED好屏幕,真正RTX生产力去年我们曾经测试过华硕的全新产品线灵耀Pro16。当时它全球首块16寸4KOLED屏幕和全球首个DialPad虚拟旋钮令笔者印象相当深刻,这样的搭配对于创意生产群体的吸引力无疑是很苹果手机屏幕进灰,你会怎么处理?最近在头条写东西,遇到很多热情的网友。昨天遇到一件事,我就想把它写出来,让各位看官评评理。事情是这样的,我媳妇手机屏幕坏了,去维修店换个屏幕。恰好我的手机钢化膜也坏了,就提出来让小开箱AppleWatchUltra上手体验有惊喜苹果推出的最新一代AppleWatch产品中,作为第8代的最强产品,AppleWatchUltra是目前最多人关注的型号,到底实际上手会是如何呢?目前最顶级的AppleWatch是骁龙4gen1首发机型iQOOZ6Lite,同级别机型中的最强者据悉,首款基于骁龙4gen1移动平台打造的性能新机iQOOZ6Lite海外首发,此款机型共有两个版本上市,4GB64GB和6GB128GB高低搭配销售,任用户选择。它们的售价更是亲红米推新品,三星价不高,不足1500元,双11平板电脑如何选?说起平板电脑,大家不由会想到iPad,不过在iPad全线涨价一波后,很多人也在思考,是不是就非iPad不可,毕竟入门款只有64GB存储啊。实际上,目前在10001500元价位的热门技术,并不值钱阿里p7失业记2022年的杭州夏天过去的并没有比往年晚一些,但是我的心却一日入秋01谈话我的顶头上司已经走了,我坐着,看着对面空空的椅子,有点没缓过神来离职只剩下这两个字在我脑袋里不断徘徊。是的关于贵州茅台的一点思考1茅台历史上市盈率情况如何?2007年以来,15年间,贵州茅台市盈率最小值是8。83,出现在2014年的2月左右,最高值104,出现在2008年初,基本与沪深300的峰尖和峰谷吻合谁会是中国茶企第一股?每次和广东的朋友们聊天,说话的结尾都是一句,欢迎来广东,请你喝茶。那么,广东人真的很爱喝茶吗?这是广东的地图,形似茶壶,这莫非就是冥冥之中的缘分!据统计,广东人一年能喝掉25万吨的一波从入门到高端全覆盖的智能手机推荐,双十一就选这几款了每年双十一都是智能手机换新的关键节点,除了市面上新机较多,最重要的是双十一打折促销后价格确实便宜。考虑到每个人对手机的需求不同,更重要的是购机预算不一样,下面就给大家从入门到高端做商用车出口迎来黄金期2022年1月9月,商用车出口42。2万辆,同比增长39。2。这一成绩虽然低于汽车行业出口同比增长55。5的大盘,但远远高于销量同比下降34。2的国内商用车市场。2022年,反复的不吹不黑,华为手环7使用了5个月,说一下使用感受经常有人说,苹果的智能手表如何如何好,几乎都吹出花儿来了,那你怎么不说苹果智能手表的缺点,比如它的价格就是最大的缺点,轻则3000左右,重则6299元(AppleWatchUltr
刘强东强势回归,儿子何去何从?据爆料,日前刘强东强势回归国内。随着刘强东的归来,京东又会有哪些新变动?引起了众人的关注。刘强东下一步的工作重点是什么?目前,拼夕夕某宝电商,都已经成为京东的竞争对手。2023年,纤细的滑盖LGG259手机韩国的LG,虽然现在已经退出了手机行业,但回看其发展历史,就可以发现不少令人记忆深刻的机型。当时,LG为了在竞争激烈的手机市场拼出一片天地,可谓十分努力,而今天就让我们来看下200冷知识熬夜竟然有这么多的好处!现在知道还不晚!你知道吗?熬夜竟然还有这四种好处,尤其是最后一个最好,今天就带你们盘点一下!第一省去了买洗发水的麻烦因为持续熬夜会导致头部油脂分泌旺盛,出现脂溢性皮炎,而头部的脂溢性皮炎会导致油腻衬衫裤子春季必穿的王炸CP!谁穿谁美!嗨,各位小仙女们,大家好呀!今天是立春,立春过后就正式进入春季了,最近处于南方的姐妹们,想必都应该感受到温度回升了吧?同时也伴随这雨水和回潮,这作为地道的南方妹纸来说,真的是超级煎超好用的眼霜大全当当当眼霜集合来啦!作为一名资深代购,根据顾客的反响和回购率,总结了以下几款好用性价比高的眼霜,快看看你适合哪种吧1。欧莱雅紫熨斗眼霜性价比之王,便宜好用量大,普通眼霜15毫升,这45岁玉兰油女孩,因发腮变成普通阿姨,但我觉得她更有韵味了人到中年,其实每个人都面临着一样的挑战皮肤松弛面部发腮身材走样这些变化哪怕是世界名模,也抵挡不住。凭借一支皮肤像剥鸡蛋壳的玉兰油广告而一炮而红的玉兰油女孩DanielleGraha最美人间烟火气最美人间烟火气冬来细雨飘满地,鹭飞天上无留意。车笛声声轮转急,千万里,亲人在家心思密。浊酒一杯缺知己,愁绪缠心解不去。香歌悠扬寒渐益,人难寐,清晨醒来寒泪湿。这是我前几年写的一首词不要看不起那些低学历的人,高学历的人可能都没他们混的好现在这个时代有种偏见,成绩好高学历的人是有高工资的,成绩差的人就是低工资的混的不好,但这是不准确的。因为有些成绩差,低学历的人,他们有个能在群体生存的关键技能,就是他们很会人情世故西媒亚特兰大ampampamp拜仁不想增强竞争对手,拒售德米拉尔ampampamp帕瓦尔至国米直播吧2月4日讯西班牙媒体Relevo的记者莫雷托撰文,谈到了冬窗巴黎圣日耳曼未能成功引进什克里尼亚尔一事。巴黎进行了多次尝试,但最终仍未能达成协议。期间国米曾尝试引进德米拉尔或帕权益受限还涨价,视频平台频爆套娃式会员,VIP身份不再尊贵来源海报新闻大众网海报新闻记者李子骄张海振报道2023年开年,反黑刑侦电视剧狂飙收视狂飙,刷爆朋友圈,背后的爱奇艺视频平台也再一次扬眉吐气。然而,随着爱奇艺的会员用户不断增多,其限exsi平台配置WindowsWSFC集群本文档详细描述了如何基于vmwareexsi平台搭建WindowsServer2019无域集群(WSFC)环境。将生产环境应用于一套完整的故障转移群集环境内,提高了整套生产业务的可