- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 Spring AOP源码解析(三)创建代理并调用
一、创建代理准备工作回顾之前的wrapIfNecessary方法,再获取到匹配的增强器后,Spring就会为拦截的bean创建代理对象: //获取匹配的增强器 Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null); //DO_NOT_PROXY ...
2018-08-29 21:12:59
773
原创 Spring AOP源码解析(二)获取增强器
一、方法入口上一节中,Spring会创建两个工厂来完成获取增强方法的功能: AspectMetadata amd = new AspectMetadata(beanType, beanName); if (amd.getAjType().getPerClause().getKind() == PerClauseKind.SINGLETON) { MetadataAwareAspec...
2018-08-29 11:20:12
523
原创 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
1319
原创 ApplicationContext拓展功能
一、属性设置对于ApplicationContext,其实例化前必须要设置的就是配置文件的路径--configLocation。例如:对于非Web环境下的ClasspathXmlApplicationContext,需要通过构造函数或调用setConfigLocation设置配置文件路径;对于Web环境下的XmlWebApplicationContext,会使用web.xml中配置的c...
2018-08-27 10:19:44
718
原创 Web容器整合ApplicationContext源码
一、web.xml配置开始在使用Tomcat等容器整合Spring的时候,需要在web.xml中添加如下的配置: <!-- spring的环境监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</...
2018-08-25 20:58:27
304
原创 Spring源码:bean创建(六)初始化
一、注入依赖后初始化下面是doCreateBean的部分代码: Object exposedObject = bean; try { //填充属性(依赖注入) populateBean(beanName, mbd, instanceWrapper); //初始化 exposedObject = initializeBean(beanName, exposed...
2018-08-25 10:35:55
347
原创 Spring源码:bean创建(五)解决依赖
一、resolveDependency在上一节最后,Spring将与获取指定相匹配的所有bean,其实现就在BeanFactory的resolveDependency中,下面是DefaultListableBeanFactory中实现: public Object resolveDependency(DependencyDescriptor descriptor, String requ...
2018-08-11 12:37:39
2007
原创 Spring源码:bean创建(四)属性注入
一、populateBean在创建了bean的实例后,Spring的下一步工作就是为bean注入其依赖的属性: protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) { //传入的beanWrapper为空,如果属性不为空就抛出异常,否则返回null...
2018-08-09 15:17:59
2877
原创 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
5570
1
原创 Spring源码:Bean创建(二)createBean方法
一、获取单例 getSingleton创建单例bean的代码在getSingleton中实现: //省略了日志打印和异常捕获的代码 public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) { //单例模式下创建bena需要加锁同步 synchronized (thi...
2018-08-08 10:01:01
5142
原创 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
573
1
原创 Spring整合MyBatis源码(一)SqlSession创建
一、Spring+MyBatis配置下面是一个常见的Spring整合MyBatis的applicationContext.xml配置:SqlSessionFactoryBean:负责解析配置文件,并实例化SqlSessionFactory和创建SqlSessionMapperScannerConfigurer:负责创建Mapper,并且注入到Spring的IOC容器中下面我们分析...
2018-07-27 16:59:30
1351
原创 SpringBoot+Shiro引起事务失效、错误原因、解决方法
一、问题今天发现用户注册的Service的事务并没有起到作用,再抛出一个RuntimeException后,并没有发生回滚,下面是调试步骤:1、检查数据库的引擎是否是innoDB2、启动类上是否加入@EnableTransactionManagement注解3、是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解4、方法是...
2018-07-25 10:41:49
13308
28
原创 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
2526
4
原创 Shiro源码学习(四)登录和权限鉴定
登录Subject结构首先看下我们在使用登录时用到的Subject结构:可以看到,这个接口的功能就是与登录登出、权限鉴定相关;另外,这个接口被WebSubject继承,这也是个接口,同时还继承了RequestPairSource,为Subject添加了获取Request和Response的能力。下面是它的结构:对Subject接口的实现类有两个:DelegatingSubject 和 WebDel...
2018-03-30 16:50:50
4054
原创 Shiro源码学习(三)常用Filter源码和继承关系
Filter类别Shiro为我们提供了默认的几种拦截器,并且也支持我们通过继承来编写我们自定义的拦截器。Shiro中默认的拦截器有:其含义如下:anon:例子/admins/**=anon 没有参数,表示可以匿名使用。 authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数 roles:例子/admins/user/**=roles[admin],参数可以...
2018-03-29 21:08:43
2039
4
原创 Shiro源码学习(二)应用拦截器链
将配置的拦截器链加入到FilterChain中我们可能会在shiro中配置上图这样的拦截器链,但是像Tomcat这样的服务器中的Filter都是需要配置在web.xml中才会生效。而在上篇文章中,我们在web.xml中只配置了一个Filter,所以Shiro需要做的就是把配置的拦截器链“嫁接”到服务器原来的Filter链中。在上篇中,我们提到,最后发挥拦截功能的是SpringShiroFilter...
2018-03-29 16:54:36
501
原创 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
621
原创 Spring源码分析:多个bean同时满足注入条件时,spring的选择
通过Spring源码分析,spring是如何解决依赖注入问题,并且在找到满足条件的bean时,如果需要注入的接口有多个实现类,spring会如何解决
2017-10-18 23:04:31
9171
2
原创 结合源码分析Java中的三种ClassLoader的关系
通过JDK源码。分析BootstrapClassLoader、ExtClassLoader、AppClassLoader之间的关系
2017-10-14 14:26:33
1020
SolrJ使用示例
2017-11-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人