spring原理简单总结

首先抛出一个疑问,Spring怎么样找到开发者自定义的Controller把对应的请求分发到对应的方法上呢? 

1.首先,要在Spring配置文件的头文件中引入spring-context

2.使用<context:component-scan>元素启动“包扫描”功能,例如<context:component-scan base-package="com.myz.controller"/其中base-package是值是包的路径。意思就是,启动了包扫描功能,将com.myz.controller这个包下以及子包下的所有类扫描一遍,将标记有@Controller、@Service、@repository、@Component等注解的类注入到IOC(Inversion of Control,即“控制反转”)容器中(beanFactory),作为Spring的Bean来管理。这样,Spring就能找到Controller类,通过@RequestMapping注解处理对应的请求。

 

spring注解是通过反射机制完成的,这些所有的注解都会被component注解接口注解,所有“继承”了component注解接口的注解修饰用户的类会被spring中的注解处理器获取(getAnonations()),判定存在component注解后,注解处理器会在spring容器框架中根据用户类的全限定名通过java的反射机制创建这个用户类的对象,并放到spring容器框架中进行管理。

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池
 

 

逻辑思路整理

1.触发加载配置文件

2.初始化所有相关联的类,扫描用户指定包下面的类

3.拿到扫描到的类,通过反射技术实例化,并且放到IOC容器中

4.实现注入,主要针对service注入到controller

5.初始化handleMapping(将URL和method对应上)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值