spring源码各个知识点汇总

大纲部分:可参考

一、依赖注入的三种方式:(1)接口注入(2)Construct注入(3)Setter注入

AbstractAutowireCapableBeanFactory进行构造和管理bean,其中,如果没有使用工厂或默认构造方法constructor-arg进行实例化,则默认使用cglib,而不是反射机制实例化bean。可参考,实例化后,开始装配bean(即赋值对象变量,或注解或xml配置成员变量参数),将注解或配置变量装配传递进去,其实实际的装配操作是通过AutowiredAnnotationBeanPostProcessor完成的(所有BeanPostProcessor实现类在bean实例化前后都会被调用对应方法)。

二、

请求拦截:过滤器(Filter,回调机制,职责链模式。拦截来自浏览器的请求)

AOP部分:分为两种,Spring AOP(动态代理模式,反射,由spring实现的一个aop,常通过注解或配置实现,可针对任意的方法并可反射获取该方法参数)和拦截器类(通过继承HandlerInterceptorAdapter实现。更精确拦截,请求前后做操作,获取request和response参数和返回的ModelAndView等)。

1、BeanFactoryPostProcessor和BeanPostProcessor的区别:Spring初始化bean的扩展点,在spring实例化任何bean之前读取元数据。可参考,PropertyResourceConfigurer 是BeanFactoryPostProcessor的一个实现类,来读取配置文件,提供构造参数中{name}这种实现。

2、了解Advice(通知)、Joinpoint(连接点)、Pointcut(切点)、Advisor(通知器)的概念。可参考

         a、Advice(通知),定义具体要做什么,如上面所说的日志记录、安全控制。有时也称为“增强”,对目标方法进行功能增强。

         b、Joinpoint(连接点),定义通知执行的代码位置,如在哪个方法执行。

         c、Pointcut(切点),定义通知在哪些连接点上执行,即定义连接点的一个集合,通常配置一个正则表达式匹配一系列方法集合。

         d、Advisor(通知器),将通知和切点关联起来,定义了哪个通知用于哪个切点。

3、AdvisedSupport存放包装了目标对象的TargetSource和其所有的Advisor,所以在JdkDynamicAopProxy获取代理对象并执行时,会去找对应的所有Advisor(有待验证这句话)。可参考文章可参考可参考2

 

三、监听事件 ApplicationListener 和 ApplicationEvent:

在ApplicationContext调用refresh()初始化时,会初始化listeners并放到集合中,当通过ApplicationContext.publishEvent(event);时,就会遍历所有listeners执行。其实就是用来观察者模式。

下面两个监听器也很好用,直接在web.xml配置就可以了:

如果你想让你的类监听应用的启动和停止事件,你就得实现ServletContextListener接口;

如果你想让你的类去监听Session的创建和失效事件,那你就得实现HttpSessionListener接口。

四、注解:

1)@Controller只是标记,真正@RequestMapping才是映射URL到对应的处理器。

2)@RequestParam绑定Request中的参数值到控制处理器的方法参数中。支持参数有HttpServlet类的,@ModelAttribute,spring的modeMap,MultipartFile上传文件,实体类等。而返回支持ModelAndView ,View 对象,String,void(已通过response返回),

3)@Autowired 可参考

4)@responsebody表示该方法的返回结果直接写入HTTP response body中

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

5)@Configuration和@Bean的使用,直接用代码来代替xml配置文件。spring扫描到该注解,会将对应的bean放到容器中。

 

 1、介绍Spring的IOC和AOP,分别是如何实现的(反射机制和动态代理) 

2、Redis如何处理分布式服务器并发造成的不一致,如果数据库不提供隔离呢? 

3、解释MySQL索引、b树,为啥不用平衡二叉树或红黑树(磁盘与内存的存储方式不同) 

4、Spring的bean加载机制,bean生成的具体步骤 

5、IOC的注入方式(set注入、构造方法注入) 

6、Spring何时创建applicationContext(web.xml中使用listener) 

7、listener是监听哪个事件 

8、SpringMVC的具体流程 

9、Spring的特性,SpringMVC中控制器的名字及其配置 

10、Spring用到哪些设计模式? 

DispatcherServlet中HandlerAdapter适配器模式,

11、controller怎么处理的请求

猜你喜欢

转载自1181731633.iteye.com/blog/2367337