spring类扫描注入-----类扫描的注解解析器
通过类扫描注入到容器中,这种方式,在实际开发中还是很常用的,可以看下自己的配置文件,就会发现,自己公司的项目,搞不好就是这么注入的。
起码,我发现我公司的项目就是这么干的。
下面来演示一下简单的例子:
此例子和上一篇的差别很微弱,相比较而言,就是在xml配置文件里面的配置又变得少了。
关于要注入到容器的bean,不用自己一个个的去写,省去了很多的重复的步骤。简化了操作。
当然我说这么多,你不看看我前面的几篇文章,不亲自实现一下,是不太明朗的。当然你要是了解这个的话,我就显得关公门前耍大刀啦。
附上,上一篇的链接,如下:
然后再上这次的测试代码:
---------------------
本文来自 李学凯 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_27093465/article/details/52710925?utm_source=copy
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.FileSystemXmlApplicationContext;
- import org.springframework.stereotype.Component;
- import javax.annotation.Resource;
- /**
- * @Component 等价于 <bean id="student" class="..Student">
- */
- @Component("sb")
- class Student {
- void say() {
- System.out.println("student");
- }
- }
- /**
- * @Component 等价于 <bean id="person" class="..Person">
- * @Component("p") 等价于 <bean id="p" class="..Person">
- */
- @Component("p")
- class Person {
- //Student类的@Component("sb")注解带有value值sb,所以bean的ID就相当于是sb
- //所以下面的@Resource(name = "sb")或者@Resource都是可以正确执行的。
- @Resource(name = "sb")
- private Student student;
- void say() {
- this.student.say();
- }
- }
- /**
- * Created by lxk on 2016/9/30
- */
- class AtInterfaceTest {
- public static void main(String[] args) {
- //ApplicationContext ctx = new ClassPathXmlApplicationContext("file:E:/fusion/intellij_work/TrunkNew/sss.xml");
- //ApplicationContext ctx = new FileSystemXmlApplicationContext("src/sss.xml");//这个时候sss.xml是在项目的根目录下的src文件夹下
- ApplicationContext ctx = new FileSystemXmlApplicationContext("sss.xml");//这个时候sss.xml是在项目的根目录下
- Person p = (Person) ctx.getBean("p");//Person类的@Component("p")带有value值,所以bean的ID就相当于改啦
- p.say();
- }
- }
然后是对应的配置文件,如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:component-scan base-package="com.xxx.x.model.s"/>
- </beans>
也能达到,测试的效果。
具体有如下总结:
- 原理:
- * 类扫描的注解解析器包含了---依赖注入---的注解解析器
- * 原理:
- 当启动spring容器的时候,
- ApplicationContext context = new FileSystemXmlApplicationContext("sss.xml");
- spring容器会加载配置文件,并且解析配置文件,就会解析到
- 1* 类扫描的注解解析器,会在base-package包及子包中扫描所有的类(包括内部类,因为的测试是把所有的class放在一个class里面搞的测试)
- * 检查类上是否有@Compontent注解
- * 如果有
- * @Compontent是否有value属性
- * 没有value属性
- 则会把这个注解所在的类的类名的第一个字母变成小写,其余的不变当做bean的id
- * 如果有value属性
- 则value属性的值就是bean的id
- * 如果没有
- do nothing
- 2* 类扫描注解解析完以后,所有的在base-package包及子包下的带有@Compontent注解的类就被纳入spring管理了
- 3* 在纳入spring管理的类中扫描各个属性,看属性是否有@Resource,再根据这个注解的规则进行操作。具体参考上一篇文章,在最上方有链接
- 4* 扫描的次数:
- * 根据base-package包及子包进行扫描
- * 扫描纳入spring管理的所有的bean的属性
--------------------- 本文来自 李学凯 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qq_27093465/article/details/52710925?utm_source=copy
spring类扫描注入-----类扫描的注解解析器的更多相关文章
- 深刻剖析spring三种注入方式以及使用注解的原理
概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作.如使用 JPA 注释配置 ORM 映射时,我们就不需要指定 PO ...
- Spring源码情操陶冶-AOP之ConfigBeanDefinitionParser解析器
aop-Aspect Oriented Programming,面向切面编程.根据百度百科的解释,其通过预编译方式和运行期动态代理实现程序功能的一种技术.主要目的是为了程序间的解耦,常用于日志记录.事 ...
- SpringMVC源码情操陶冶-AnnotationDrivenBeanDefinitionParser注解解析器
mvc:annotation-driven节点的解析器,是springmvc的核心解析器 官方注释 Open Declaration org.springframework.web.servlet.c ...
- spring beans源码解读之--bean definiton解析器
spring提供了有两种方式的bean definition解析器:PropertiesBeanDefinitionReader和XmLBeanDefinitionReader即属性文件格式的bean ...
- 【Java EE 学习 50】【Spring学习第二天】【使用注解的DI实现】【spring中的继承】【动态代理伪hibernate实现】
一.使用注解的DI实现 1.@Resource 使用该注解能够实现引用型属性的DI实现,该注解能够根据属性名和属性类型自动给属性赋值.一般使用@Resource(name="student& ...
- 这一次搞懂Spring自定义标签以及注解解析原理
前言 在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如何解析的.同时我们常用的注解如:@Se ...
- spring的三种注解管理器
1.依赖注入的注解解析器 在配置文件中; * xsd xmlns:context="http://www.springframework.org/schema/context" h ...
- Spring笔记(5) - 声明式事务@EnableTransactionManagement注解源码分析
一.背景 前面详解了实现Spring事务的两种方式的不同实现:编程式事务和声明式事务,对于配置都使用到了xml配置,今天介绍Spring事务的注解开发,例如下面例子: 配置类:注册数据源.JDBC模板 ...
- Spring 缓存注解解析过程
Spring 缓存注解解析过程 通过 SpringCacheAnnotationParser 的 parseCacheAnnotations 方法解析指定方法或类上的缓存注解, @Cacheable ...
随机推荐
- 在eclipse使用map reduce编写word count程序生成jar包并在虚拟机运行的步骤
---恢复内容开始--- 1.首先准备一个需要统计的单词文件 word.txt,我们的单词是以空格分开的,统计时按照空格分隔即可 hello hadoop hello yarnhello zookee ...
- BT中的磁力链接(转)
注意:磁力链接不是迅雷的,而是BT网络中的一种协议. 磁力链接与种子文件 磁力链接并不是一个新概念,早在2002年,相关的标准草稿就已经制定了.但直到2012年海盗湾为规避版权问题删除了站点上的所有T ...
- bubble chat listview
最近在iOS中用到bubble chat listview,找了个比较有名气的lib(MessagesTableViewController)=>https://github.com/jesse ...
- 【MyEcplise】设置右键快捷菜单的方法
在我们右键新建项目或文件时,有许多的选项我们几乎是不用的,那就没有必要放在右键的快捷菜单中:而有些选项是我们经常会用的,但是右键快捷菜单有没有,我们总是需要选择其它去到弹出的对话框中取选取.这些操作很 ...
- 【bootstrap】modal模态框的几种打开方法+问题集锦
第一部分: 关于bootstrap中modal的使用,下面把几种自己用的打开方法展示出来 首先呢,得有个Bootstrap的页面,这里就不说了. 其次呢,得有个modal放在页面中,不管你这段代码加在 ...
- CString和string头文件
在使用了MFC库的工程中CString可以直接使用,在没有使用MFC库的工程中加入#include <atlstr.h> 要使用STL里的string,要加入#include <st ...
- weblogic的几点配置
2.在tomcat下写过滤器以后还有的地方需要手工转码<-->weglobic下也不用 eg:SubjectAction.java3.weblogic下anltr.jar有冲突,需要从外界 ...
- Lightoj 1088 - Points in Segments 【二分】
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1088 题意: 有一维的n个点和q条线段.询问每条线段上的点有多少个. 思路:寻 ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps Office的JavaScript对象模型
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第11章节--为Office和SP解决方式开发集成Apps Office的JavaScript对象模型 ...
- python(31)- 模块练习
1. 小程序:根据用户输入选择可以完成以下功能: 创意文件,如果路径不存在,创建文件夹后再创建文件 能够查看当前路径 在当前目录及其所有子目录下查找文件名包含指定字符串的文件 ...