![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码
文章平均质量分 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 · 527 阅读 · 1 评论 -
Spring AOP源码解析(三)创建代理并调用
一、创建代理准备工作回顾之前的wrapIfNecessary方法,再获取到匹配的增强器后,Spring就会为拦截的bean创建代理对象: //获取匹配的增强器 Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); //DO_NOT_PROXY ...原创 2018-08-29 21:12:59 · 737 阅读 · 0 评论 -
Spring源码:bean创建(六)初始化
一、注入依赖后初始化下面是doCreateBean的部分代码: Object exposedObject = bean; try { //填充属性(依赖注入) populateBean(beanName, mbd, instanceWrapper); //初始化 exposedObject = initializeBean(beanName, exposed...原创 2018-08-25 10:35:55 · 311 阅读 · 0 评论 -
Spring AOP源码解析(二)获取增强器
一、方法入口上一节中,Spring会创建两个工厂来完成获取增强方法的功能: AspectMetadata amd = new AspectMetadata(beanType, beanName); if (amd.getAjType().getPerClause().getKind() == PerClauseKind.SINGLETON) { MetadataAwareAspec...原创 2018-08-29 11:20:12 · 490 阅读 · 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 · 1278 阅读 · 0 评论 -
ApplicationContext拓展功能
一、属性设置对于ApplicationContext,其实例化前必须要设置的就是配置文件的路径--configLocation。例如:对于非Web环境下的ClasspathXmlApplicationContext,需要通过构造函数或调用setConfigLocation设置配置文件路径;对于Web环境下的XmlWebApplicationContext,会使用web.xml中配置的c...原创 2018-08-27 10:19:44 · 676 阅读 · 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 · 2803 阅读 · 0 评论 -
Spring源码:bean创建(五)解决依赖
一、resolveDependency在上一节最后,Spring将与获取指定相匹配的所有bean,其实现就在BeanFactory的resolveDependency中,下面是DefaultListableBeanFactory中实现: public Object resolveDependency(DependencyDescriptor descriptor, String requ...原创 2018-08-11 12:37:39 · 1914 阅读 · 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 · 5477 阅读 · 1 评论 -
Spring源码:Bean创建(二)createBean方法
一、获取单例 getSingleton创建单例bean的代码在getSingleton中实现: //省略了日志打印和异常捕获的代码 public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { //单例模式下创建bena需要加锁同步 synchronized (thi...原创 2018-08-08 10:01:01 · 5030 阅读 · 0 评论 -
Spring整合MyBatis源码(一)SqlSession创建
一、Spring+MyBatis配置下面是一个常见的Spring整合MyBatis的applicationContext.xml配置:SqlSessionFactoryBean:负责解析配置文件,并实例化SqlSessionFactory和创建SqlSessionMapperScannerConfigurer:负责创建Mapper,并且注入到Spring的IOC容器中下面我们分析...原创 2018-07-27 16:59:30 · 1292 阅读 · 0 评论 -
MyBatis缓存Cache源码分析
一、缓存接口介绍MyBatis的一级缓存和二级缓存都是使用的Cache接口实现类,它的方法定义如下:public interface Cache { String getId(); void putObject(Object key, Object value); Object getObject(Object key); Object removeObject...原创 2018-07-23 14:57:07 · 2460 阅读 · 4 评论 -
Shiro源码学习(二)应用拦截器链
将配置的拦截器链加入到FilterChain中我们可能会在shiro中配置上图这样的拦截器链,但是像Tomcat这样的服务器中的Filter都是需要配置在web.xml中才会生效。而在上篇文章中,我们在web.xml中只配置了一个Filter,所以Shiro需要做的就是把配置的拦截器链“嫁接”到服务器原来的Filter链中。在上篇中,我们提到,最后发挥拦截功能的是SpringShiroFilter...原创 2018-03-29 16:54:36 · 460 阅读 · 0 评论 -
Shiro源码学习(一)Filter的创建
一、从web.xml到Spring容器我们在使用spring配置shiro时,有两处需要配置Filter相关的地方: <!-- Shiro配置 --> <filter> <filter-name>shiroFilter</filter-name> <filter-class>org.sprin...原创 2018-03-29 15:16:23 · 558 阅读 · 0 评论 -
Shiro源码学习(四)登录和权限鉴定
登录Subject结构首先看下我们在使用登录时用到的Subject结构:可以看到,这个接口的功能就是与登录登出、权限鉴定相关;另外,这个接口被WebSubject继承,这也是个接口,同时还继承了RequestPairSource,为Subject添加了获取Request和Response的能力。下面是它的结构:对Subject接口的实现类有两个:DelegatingSubject 和 WebDel...原创 2018-03-30 16:50:50 · 4003 阅读 · 0 评论 -
Shiro源码学习(三)常用Filter源码和继承关系
Filter类别Shiro为我们提供了默认的几种拦截器,并且也支持我们通过继承来编写我们自定义的拦截器。Shiro中默认的拦截器有:其含义如下:anon:例子/admins/**=anon 没有参数,表示可以匿名使用。 authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数 roles:例子/admins/user/**=roles[admin],参数可以...原创 2018-03-29 21:08:43 · 1987 阅读 · 4 评论 -
Spring源码分析:多个bean同时满足注入条件时,spring的选择
通过Spring源码分析,spring是如何解决依赖注入问题,并且在找到满足条件的bean时,如果需要注入的接口有多个实现类,spring会如何解决原创 2017-10-18 23:04:31 · 9004 阅读 · 2 评论 -
Web容器整合ApplicationContext源码
一、web.xml配置开始在使用Tomcat等容器整合Spring的时候,需要在web.xml中添加如下的配置: <!-- spring的环境监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</...原创 2018-08-25 20:58:27 · 269 阅读 · 0 评论