spring ioc Aop原理 博客分类: spring spring
程序员文章站
2024-03-14 12:07:52
...
以下面代码为例:
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:application.xml");
User user = (User) applicationContext.getBean("user");
user.getName();
很显然spring会读取classpath下的配置文件,然后解析配置文件中的各个标签:
当遇到<context:component-scan base-package="com.test.app.service" />就会去扫描这个路径然后封装类的数据到BeanDefinition中,每一个bean对应一个BeanDefinition.然后封装到private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(64);这个map中.至于直接在xml中定义的bean就更简单了.如果读取<bean/>标签的内容解析并封装到BeanDefinition.然后封装到beanDefinitionMap.
然后是调用AbstractApplicationContext中的refresh()方法的finishBeanFactoryInitialization(beanFactory)这句代码.这句代码将初始化spring的所有bean放到DefaultSingletonBeanRegistry 中的private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);singletonObjects中,注意放到singletonObjects中的类会根据配置的切面来判断是否生成代理类,也就是放在这里面的bean如果要被拦截就会生成代理类,如果不需要被拦截就会生成普通类.
当使用这些类的时候直接从singletonObjects中获取bean。如果是spring aop的话那么就会获取代理bean然后调用反射挨个执行拦截器中的方法以及bean中的方法。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("classpath:application.xml");
User user = (User) applicationContext.getBean("user");
user.getName();
很显然spring会读取classpath下的配置文件,然后解析配置文件中的各个标签:
当遇到<context:component-scan base-package="com.test.app.service" />就会去扫描这个路径然后封装类的数据到BeanDefinition中,每一个bean对应一个BeanDefinition.然后封装到private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<String, BeanDefinition>(64);这个map中.至于直接在xml中定义的bean就更简单了.如果读取<bean/>标签的内容解析并封装到BeanDefinition.然后封装到beanDefinitionMap.
然后是调用AbstractApplicationContext中的refresh()方法的finishBeanFactoryInitialization(beanFactory)这句代码.这句代码将初始化spring的所有bean放到DefaultSingletonBeanRegistry 中的private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);singletonObjects中,注意放到singletonObjects中的类会根据配置的切面来判断是否生成代理类,也就是放在这里面的bean如果要被拦截就会生成代理类,如果不需要被拦截就会生成普通类.
当使用这些类的时候直接从singletonObjects中获取bean。如果是spring aop的话那么就会获取代理bean然后调用反射挨个执行拦截器中的方法以及bean中的方法。
上一篇: Thread 重要方法总结 博客分类: java java Thread 重要方法总结 博客分类: Concurrent
下一篇: Java Annotation注释语法参考 博客分类: java java Java Annotation注释语法 博客分类: JAVA基础 JavaEJBBeanSUN
推荐阅读
-
spring 获取配置文件properties中参数 博客分类: spring
-
spring 获取配置文件properties中参数 博客分类: spring
-
mybatis编程事务管理参考二 博客分类: mybatis mybatis Mybatis\Spring编程式事务管理 配置管理SpringJDBCDAO编程
-
使用Spring与Aspectj进行面向切面编程参考 博客分类: spring spring aspectj
-
Struts2+EJB2+Spring2+Ibatis分布式事务参考 博客分类: spring springejbibatis Spring+EJB EJBSpringAOPiBATISBean
-
spring静态注入 博客分类: spring
-
spring获取applicationContext的最佳方式 博客分类: spring spring
-
一个基于spring aop实现的日志系统 博客分类: spring
-
分布式事务JTA之实践:Spring+ATOMIKOS参考 博客分类: springjta spring
-
spring ioc Aop原理 博客分类: spring spring