spring
文章平均质量分 91
finalcola
helloworld
展开
-
Spring源码:Bean创建(一)
1、BeanFactory.getBean(String name)方法//AbstractBeanFactory.javapublic Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false); }2、真正创建Bean的地方--doCreateBe...原创 2018-08-05 21:10:30 · 517 阅读 · 1 评论 -
Spring AOP源码解析(三)创建代理并调用
一、创建代理准备工作回顾之前的wrapIfNecessary方法,再获取到匹配的增强器后,Spring就会为拦截的bean创建代理对象: //获取匹配的增强器 Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); //DO_NOT_PROXY ...原创 2018-08-29 21:12:59 · 733 阅读 · 0 评论 -
Spring源码:bean创建(六)初始化
一、注入依赖后初始化下面是doCreateBean的部分代码: Object exposedObject = bean; try { //填充属性(依赖注入) populateBean(beanName, mbd, instanceWrapper); //初始化 exposedObject = initializeBean(beanName, exposed...原创 2018-08-25 10:35:55 · 306 阅读 · 0 评论 -
Spring AOP源码解析(二)获取增强器
一、方法入口上一节中,Spring会创建两个工厂来完成获取增强方法的功能: AspectMetadata amd = new AspectMetadata(beanType, beanName); if (amd.getAjType().getPerClause().getKind() == PerClauseKind.SINGLETON) { MetadataAwareAspec...原创 2018-08-29 11:20:12 · 486 阅读 · 0 评论 -
Spring AOP源码解析(一)Advisor获取
一、入口AOP的Jar包如下如所示:META-INF中是Spring自定义标签的配置文件,对<aop>标签的支持spring.schemas配置如下,作用是定义<aop>标签的内容(根据不同版本,Spring使用不同的xsd文件来描述):http\://www.springframework.org/schema/aop/spring-aop-2.0....原创 2018-08-28 16:54:30 · 1274 阅读 · 0 评论 -
ApplicationContext拓展功能
一、属性设置对于ApplicationContext,其实例化前必须要设置的就是配置文件的路径--configLocation。例如:对于非Web环境下的ClasspathXmlApplicationContext,需要通过构造函数或调用setConfigLocation设置配置文件路径;对于Web环境下的XmlWebApplicationContext,会使用web.xml中配置的c...原创 2018-08-27 10:19:44 · 670 阅读 · 0 评论 -
Spring源码:bean创建(四)属性注入
一、populateBean在创建了bean的实例后,Spring的下一步工作就是为bean注入其依赖的属性: protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) { //传入的beanWrapper为空,如果属性不为空就抛出异常,否则返回null...原创 2018-08-09 15:17:59 · 2790 阅读 · 0 评论 -
Spring源码:bean创建(五)解决依赖
一、resolveDependency在上一节最后,Spring将与获取指定相匹配的所有bean,其实现就在BeanFactory的resolveDependency中,下面是DefaultListableBeanFactory中实现: public Object resolveDependency(DependencyDescriptor descriptor, String requ...原创 2018-08-11 12:37:39 · 1904 阅读 · 0 评论 -
Spring源码:bean创建(三):createBeanInstance
一、创建bean实例在doCreateBean方法中,首先会创建bean的实例,负责创建的方法为createBeanInstance: protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // 解析class Cla...原创 2018-08-08 10:01:13 · 5456 阅读 · 1 评论 -
Spring源码:Bean创建(二)createBean方法
一、获取单例 getSingleton创建单例bean的代码在getSingleton中实现: //省略了日志打印和异常捕获的代码 public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { //单例模式下创建bena需要加锁同步 synchronized (thi...原创 2018-08-08 10:01:01 · 5012 阅读 · 0 评论 -
Spring整合MyBatis源码(一)SqlSession创建
一、Spring+MyBatis配置下面是一个常见的Spring整合MyBatis的applicationContext.xml配置:SqlSessionFactoryBean:负责解析配置文件,并实例化SqlSessionFactory和创建SqlSessionMapperScannerConfigurer:负责创建Mapper,并且注入到Spring的IOC容器中下面我们分析...原创 2018-07-27 16:59:30 · 1286 阅读 · 0 评论 -
SpringBoot+Shiro引起事务失效、错误原因、解决方法
一、问题今天发现用户注册的Service的事务并没有起到作用,再抛出一个RuntimeException后,并没有发生回滚,下面是调试步骤:1、检查数据库的引擎是否是innoDB2、启动类上是否加入@EnableTransactionManagement注解3、是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解4、方法是...原创 2018-07-25 10:41:49 · 13091 阅读 · 30 评论 -
Spring源码分析:多个bean同时满足注入条件时,spring的选择
通过Spring源码分析,spring是如何解决依赖注入问题,并且在找到满足条件的bean时,如果需要注入的接口有多个实现类,spring会如何解决原创 2017-10-18 23:04:31 · 8968 阅读 · 2 评论 -
Web容器整合ApplicationContext源码
一、web.xml配置开始在使用Tomcat等容器整合Spring的时候,需要在web.xml中添加如下的配置: <!-- spring的环境监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</...原创 2018-08-25 20:58:27 · 265 阅读 · 0 评论