`

css的源码学习日志--spring IoC, AOP

阅读更多

基于spring 3.1.0.
IoC和AOP是spring的基础。先看IoC。接口以BeanFactory和ApplicationContext为中心,abstractBeanFactory有很多实现。从ClassPathXmlApplicationContext开始。(添加了resource管理)。从refresh()开始。
初始化
  Resource Loader
  load BeanDefinition
    Reader
    register
      documentReader
      BeanDefinitionParserDelegate
  Registry(FactoryBeanRegistrySupport.ConcurrentHashMap)
依赖注入(getBean), abstractBeanFactory.getObjectForBeanInstance(),
FactoryBeanRegistrySupport.getObjectFromFactoryBean(),doGetObjectFromFactoryBean(),注意这里factory.getObject();实现FactoryBean.

初始化只是load beanDefinition,注入在getBean时发生,若有循环引用对singleton不会有问题,对prototype有检测,若被引用bean则在creating中则抛异常。

--AOP
概念:advice, pointcut, advisor.
以ProxyFactoryBean为例。它是一个BeanFactoryAware可得到BeanFactory,同时在init Bean的时候会调其getObject方法因此可实现其Factory的作用返回proxy。aopproxy有两种:jdk**proxy, cglib**proxy,以不同的方式(分别调invoke, intercept)在其中调用ReflectiveMethodInvocation.proceed()。若没有advise则直接调用方法,有makeAccessible。

来看proceed()。从chain中取matcher(advisor)或interceptor,前者根据其matcher调interceptor后者直接调。

来看chain怎么从配置中来。其来自***Proxy中的AdvisedSupport advised;从getInterceptorsAndDynamicInterceptionAdvice入手,其从DefaultAdvisorChainFactory中读,由AdvisorAdapterRegistry完成,而参数来自于AdvisedSupport的advisors.这个advisors要回到ProxyFactoryBean.initializeAdvisorChain(),从beanFactory.getBean()取得advice并add, ProxyBeanFactory是一个autowirecapableBeanFactory所以在init它自身的时候会被设置BeanFactory本身,给予它感知factory的能力。

注意以上概念,我们要织入的是advice,但是chain里是interceptor,这里有不一致。这就是adapter的作用。三种adviceAdapter将advice包装成interceptor,放到chain中。包装的时候分别完成before, after, around等功能。

 

----注:

bean在装载的时候就放到factoryBeanObjectCache或其它不同的cache中决定了bean的种类。

 

----springMVC:

了解IoC和AOP后这里就简单了。在web.xml中一个listener一个dispatcherServlet. listener是一个ContextLoader去init webapplicationContext. 见其configureAndRefreshWebApplicationContext(wac, sc)通过sc设置wac并refresh(),即开始了从xml加载beans的过程。这里有determineContextClass()得到 wac的具体实现。然后设置到上下文sc中。

在dispatcherServlet中, FrameworkServlet.findWebApplicationContext()从utils(sc)得到wac。

分享到:
评论

相关推荐

    tangt-and-song-dynasties-spring_springmvc_mybatis-master.zip

    通过这个项目,开发者可以学习如何设置SSM框架,如何配置Spring的IoC容器,如何编写SpringMVC的Controller,以及如何使用MyBatis进行数据库操作。同时,项目可能还涉及到了事务管理、异常处理、日志记录等其他重要的...

    SpringMVC精品资源--spring源码学习附注释(Version 4.2.0),the second deb.zip

    在标题中提到的"Spring源码学习附注释(Version 4.2.0)",这部分内容指的是Spring框架的核心源代码,版本为4.2.0。源码学习对于深入理解Spring的工作原理和扩展自定义功能至关重要。注释的加入使得源码更易于阅读和...

    AM ESB.rar-CSS.rar-DHtml.rar-Ibatis.rar-Spring.rar

    学习Spring需要理解其核心模块,如IoC容器、AOP、MVC框架以及Spring Boot和Spring Cloud等相关生态。 至于博文链接(https://czj56372268.iteye.com/blog/767340),虽然在这个回答中无法直接访问,但它可能提供了...

    maven+spring-mvc+spring+mybatis简单的登陆注册,让你更加快速上手

    Spring框架是Java企业级应用的核心,它提供了IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)等特性。在本项目中,Spring负责管理对象的生命周期和依赖关系,比如数据库...

    JavaWeb-Hibernate-Struts2-Spring2

    Spring2的IoC容器负责管理对象的生命周期和依赖关系,而AOP则允许在不修改代码的情况下实现横切关注点,如日志、事务管理等。此外,Spring2还提供了数据访问、Web MVC、测试等模块,与Hibernate和Struts2结合使用,...

    jsf2(primefaces3)+spring+hibernate案例下载

    - **spring-context**:提供核心的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)功能,管理对象的生命周期和依赖关系。 - **spring-beans**:处理Bean的定义和装配,是Spring IoC的基础。 - **...

    hello-spring:Spring学习并制作登录webApp

    - **AOP(Aspect-Oriented Programming,面向切面编程)**:Spring支持AOP,允许我们在不修改源代码的情况下,添加新的功能或记录日志、事务管理等。 2. **Spring MVC**: - **Model-View-Controller架构**:...

    Web-drink-ordering-spring-mvc

    Spring框架不仅包括Spring MVC,还有IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)等组件,可以用来管理对象依赖关系和实现切面编程。 【压缩包子文件的文件名称列表】"Web-drink-ordering...

    Spring3.0就这么简单源码

    这本书旨在简化Spring框架的学习过程,通过实例和源码解析,帮助读者快速掌握Spring的核心概念和技术。源码包含了多个章节的内容,每个章节对应一个特定的主题,便于读者逐步学习和实践。 在提供的文件列表中,我们...

    Rahuljoarder-learning-webtechlogies-spring-20-21

    理解IoC容器是如何工作的,以及如何配置和使用Bean是学习Spring的第一步。 5. **Spring MVC**:Spring MVC是Spring框架的一部分,用于构建web应用程序。学习模型-视图-控制器模式,如何创建控制器,处理HTTP请求,...

    Spring+Dwr整合的项目(源码)

    它的核心特性是IOC(控制反转)和AOP(面向切面编程),提供了大量的模块,如Spring MVC、Spring JDBC、Spring ORM等。 - DWR:DWR允许JavaScript在客户端直接调用服务器端的Java方法,实现数据的实时更新,提高...

    毕设绝技-理财管理(spring boot+thymeleaf)

    同时,Spring Boot继承了Spring框架原有的优秀特性,如控制反转(IOC)、面向切面编程(AOP)等,为系统提供了强大的功能支持。 Thymeleaf是一个适用于Web和独立环境的现代服务器端Java模板引擎,能够处理HTML、XML...

    狂神JAVA-18-SpringBoot学习1

    这个学习笔记主要涵盖了Spring Boot的基础知识、微服务阶段的发展以及如何学习Spring Boot。 1. **微服务阶段** - **JavaSE**:在Java标准版环境下,我们学习面向对象编程(OOP)和MySQL数据库进行数据持久化。...

    cafe-spring:Spring学习的简单项目

    通过分析这个项目,我们可以深入学习Spring框架的核心特性,如IoC(控制反转)和DI(依赖注入),以及如何使用Spring Boot简化初始化和配置。此外,还可以了解如何使用Spring MVC处理HTTP请求,以及Spring Data与...

    Spring-Demo-1.zip

    Spring框架,作为Java领域最为广泛应用的轻量级框架之一,以其强大的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性,为开发者提供了高效、灵活的编程环境。本篇文章将通过分析名为"Spring-...

    web开发手册(css、jquery、struts2、spring、hibernate)

    同时,Spring还提供了AOP支持,用于实现日志记录、性能监控等功能。另外,Spring MVC是Spring框架的一部分,用于构建Web应用,它结合了Struts2的MVC理念,提供了更灵活的结构和配置选项。 【Hibernate】 Hibernate...

    Spring教程 spring tutorial

    3. **面向切面编程(AOP)**:支持将横切关注点模块化,如日志记录、事务管理和安全等。 4. **依赖注入(DI)**:通过构造器或setter方法注入依赖,简化组件之间的耦合。 5. **模块化**:由多个模块组成,包括核心...

    注册表单spring MVC+hibernate+spring+easyui

    3. **Spring**:Spring框架的核心是IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。在本项目中,Spring作为依赖注入容器,管理所有bean的生命周期,包括Spring MVC的...

Global site tag (gtag.js) - Google Analytics