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常量池
 

猜你喜欢

转载自blog.csdn.net/m0_37914467/article/details/90032143