<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[finalcola的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/finalcola</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; finalcola]]></copyright><item><title><![CDATA[Spring AOP源码解析（三）创建代理并调用]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82184560</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82184560</guid><author>finalcola</author><pubDate>Wed, 29 Aug 2018 21:12:59 +0800</pubDate><description><![CDATA[一、创建代理准备工作

回顾之前的wrapIfNecessary方法，再获取到匹配的增强器后，Spring就会为拦截的bean创建代理对象：


		//获取匹配的增强器
		Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(bean.getClass(), beanName, null);
		//DO_NOT_PROXY ...]]></description><category></category></item><item><title><![CDATA[Spring AOP源码解析（二）获取增强器]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82178441</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82178441</guid><author>finalcola</author><pubDate>Wed, 29 Aug 2018 11:20:12 +0800</pubDate><description><![CDATA[一、方法入口

上一节中，Spring会创建两个工厂来完成获取增强方法的功能：


	AspectMetadata amd = new AspectMetadata(beanType, beanName);
	if (amd.getAjType().getPerClause().getKind() == PerClauseKind.SINGLETON) {
		MetadataAwareAspec...]]></description><category></category></item><item><title><![CDATA[Spring AOP源码解析（一）Advisor获取]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82108745</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82108745</guid><author>finalcola</author><pubDate>Tue, 28 Aug 2018 16:54:30 +0800</pubDate><description><![CDATA[一、入口

AOP的Jar包如下如所示：



META-INF中是Spring自定义标签的配置文件，对&amp;lt;aop&amp;gt;标签的支持

spring.schemas配置如下，作用是定义&amp;lt;aop&amp;gt;标签的内容（根据不同版本，Spring使用不同的xsd文件来描述）：


http\://www.springframework.org/schema/aop/spring-aop-2.0....]]></description><category></category></item><item><title><![CDATA[ApplicationContext拓展功能]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82077933</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82077933</guid><author>finalcola</author><pubDate>Mon, 27 Aug 2018 10:19:44 +0800</pubDate><description><![CDATA[一、属性设置

对于ApplicationContext，其实例化前必须要设置的就是配置文件的路径--configLocation。例如：

对于非Web环境下的ClasspathXmlApplicationContext，需要通过构造函数或调用setConfigLocation设置配置文件路径；

对于Web环境下的XmlWebApplicationContext，会使用web.xml中配置的c...]]></description><category></category></item><item><title><![CDATA[Web容器整合ApplicationContext源码]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82052872</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82052872</guid><author>finalcola</author><pubDate>Sat, 25 Aug 2018 20:58:27 +0800</pubDate><description><![CDATA[一、web.xml配置开始

在使用Tomcat等容器整合Spring的时候，需要在web.xml中添加如下的配置：


  &amp;lt;!-- spring的环境监听器 --&amp;gt;
    &amp;lt;listener&amp;gt;
        &amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/...]]></description><category></category></item><item><title><![CDATA[Spring源码：bean创建（六）初始化]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/82048372</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/82048372</guid><author>finalcola</author><pubDate>Sat, 25 Aug 2018 10:35:55 +0800</pubDate><description><![CDATA[一、注入依赖后初始化

下面是doCreateBean的部分代码：


		Object exposedObject = bean;
		try {
			//填充属性（依赖注入）
			populateBean(beanName, mbd, instanceWrapper);
			//初始化
			exposedObject = initializeBean(beanName, exposed...]]></description><category></category></item><item><title><![CDATA[Spring源码：bean创建（五）解决依赖]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81537380</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81537380</guid><author>finalcola</author><pubDate>Sat, 11 Aug 2018 12:37:39 +0800</pubDate><description><![CDATA[一、resolveDependency

在上一节最后，Spring将与获取指定相匹配的所有bean，其实现就在BeanFactory的resolveDependency中，下面是DefaultListableBeanFactory中实现：


	public Object resolveDependency(DependencyDescriptor descriptor, String requ...]]></description><category></category></item><item><title><![CDATA[Spring源码：bean创建（四）属性注入]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81504547</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81504547</guid><author>finalcola</author><pubDate>Thu, 09 Aug 2018 15:17:59 +0800</pubDate><description><![CDATA[一、populateBean

在创建了bean的实例后，Spring的下一步工作就是为bean注入其依赖的属性：


	protected void populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper bw) {
		//传入的beanWrapper为空，如果属性不为空就抛出异常，否则返回null...]]></description><category></category></item><item><title><![CDATA[Spring源码：bean创建（三）:createBeanInstance]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81451019</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81451019</guid><author>finalcola</author><pubDate>Wed, 08 Aug 2018 10:01:13 +0800</pubDate><description><![CDATA[一、创建bean实例

在doCreateBean方法中，首先会创建bean的实例，负责创建的方法为createBeanInstance：


	protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) {
		// 解析class
		Cla...]]></description><category></category></item><item><title><![CDATA[Spring源码：Bean创建（二）createBean方法]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81449140</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81449140</guid><author>finalcola</author><pubDate>Wed, 08 Aug 2018 10:01:01 +0800</pubDate><description><![CDATA[一、获取单例 getSingleton

创建单例bean的代码在getSingleton中实现：


	//省略了日志打印和异常捕获的代码
	public Object getSingleton(String beanName, ObjectFactory&amp;lt;?&amp;gt; singletonFactory) {
		//单例模式下创建bena需要加锁同步
		synchronized (thi...]]></description><category></category></item><item><title><![CDATA[Spring源码:Bean创建（一）]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/78388764</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/78388764</guid><author>finalcola</author><pubDate>Sun, 05 Aug 2018 21:10:30 +0800</pubDate><description><![CDATA[1、BeanFactory.getBean(String name)方法

//AbstractBeanFactory.java


public Object getBean(String name) throws BeansException {
		return doGetBean(name, null, null, false);
	}

2、真正创建Bean的地方--doCreateBe...]]></description><category></category></item><item><title><![CDATA[Spring整合MyBatis源码（一）SqlSession创建]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81230849</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81230849</guid><author>finalcola</author><pubDate>Fri, 27 Jul 2018 16:59:30 +0800</pubDate><description><![CDATA[一、Spring+MyBatis配置

下面是一个常见的Spring整合MyBatis的applicationContext.xml配置：



SqlSessionFactoryBean：负责解析配置文件，并实例化SqlSessionFactory和创建SqlSession
MapperScannerConfigurer：负责创建Mapper，并且注入到Spring的IOC容器中

下面我们分析...]]></description><category></category></item><item><title><![CDATA[SpringBoot+Shiro引起事务失效、错误原因、解决方法]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81197584</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81197584</guid><author>finalcola</author><pubDate>Wed, 25 Jul 2018 10:41:49 +0800</pubDate><description><![CDATA[一、问题

今天发现用户注册的Service的事务并没有起到作用，再抛出一个RuntimeException后，并没有发生回滚，下面是调试步骤：

1、检查数据库的引擎是否是innoDB

2、启动类上是否加入@EnableTransactionManagement注解

3、是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解

4、方法是...]]></description><category></category></item><item><title><![CDATA[MyBatis缓存Cache源码分析]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/81155517</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/81155517</guid><author>finalcola</author><pubDate>Mon, 23 Jul 2018 14:57:07 +0800</pubDate><description><![CDATA[一、缓存接口介绍

MyBatis的一级缓存和二级缓存都是使用的Cache接口实现类，它的方法定义如下：


public interface Cache {

  String getId();

  void putObject(Object key, Object value);

  Object getObject(Object key);


  Object removeObject...]]></description><category></category></item><item><title><![CDATA[Shiro源码学习（四）登录和权限鉴定]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/79749705</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/79749705</guid><author>finalcola</author><pubDate>Fri, 30 Mar 2018 16:50:50 +0800</pubDate><description><![CDATA[登录Subject结构首先看下我们在使用登录时用到的Subject结构：可以看到，这个接口的功能就是与登录登出、权限鉴定相关；另外，这个接口被WebSubject继承，这也是个接口，同时还继承了RequestPairSource，为Subject添加了获取Request和Response的能力。下面是它的结构：对Subject接口的实现类有两个：DelegatingSubject 和 WebDel...]]></description><category></category></item><item><title><![CDATA[Shiro源码学习（三）常用Filter源码和继承关系]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/79745516</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/79745516</guid><author>finalcola</author><pubDate>Thu, 29 Mar 2018 21:08:43 +0800</pubDate><description><![CDATA[Filter类别Shiro为我们提供了默认的几种拦截器，并且也支持我们通过继承来编写我们自定义的拦截器。Shiro中默认的拦截器有：其含义如下：anon:例子/admins/**=anon 没有参数，表示可以匿名使用。 authc:例如/admins/user/**=authc表示需要认证(登录)才能使用，没有参数 roles：例子/admins/user/**=roles[admin],参数可以...]]></description><category></category></item><item><title><![CDATA[Shiro源码学习（二）应用拦截器链]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/79743322</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/79743322</guid><author>finalcola</author><pubDate>Thu, 29 Mar 2018 16:54:36 +0800</pubDate><description><![CDATA[将配置的拦截器链加入到FilterChain中我们可能会在shiro中配置上图这样的拦截器链，但是像Tomcat这样的服务器中的Filter都是需要配置在web.xml中才会生效。而在上篇文章中，我们在web.xml中只配置了一个Filter，所以Shiro需要做的就是把配置的拦截器链“嫁接”到服务器原来的Filter链中。在上篇中，我们提到，最后发挥拦截功能的是SpringShiroFilter...]]></description><category></category></item><item><title><![CDATA[Shiro源码学习（一）Filter的创建]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/79741729</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/79741729</guid><author>finalcola</author><pubDate>Thu, 29 Mar 2018 15:16:23 +0800</pubDate><description><![CDATA[一、从web.xml到Spring容器我们在使用spring配置shiro时，有两处需要配置Filter相关的地方：    &amp;lt;!-- Shiro配置 --&amp;gt;
    &amp;lt;filter&amp;gt;
        &amp;lt;filter-name&amp;gt;shiroFilter&amp;lt;/filter-name&amp;gt;
        &amp;lt;filter-class&amp;gt;org.sprin...]]></description><category></category></item><item><title><![CDATA[solrJ使用]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/78639972</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/78639972</guid><author>finalcola</author><pubDate>Sun, 26 Nov 2017 22:29:51 +0800</pubDate><description><![CDATA[描述solr的一些基本参数用法，solrJ的几个重要类介绍以及solrJ的使用]]></description><category></category></item><item><title><![CDATA[Spring源码分析：多个bean同时满足注入条件时,spring的选择]]></title><link>https://blog.youkuaiyun.com/finalcola/article/details/78279078</link><guid>https://blog.youkuaiyun.com/finalcola/article/details/78279078</guid><author>finalcola</author><pubDate>Wed, 18 Oct 2017 23:04:31 +0800</pubDate><description><![CDATA[通过Spring源码分析，spring是如何解决依赖注入问题，并且在找到满足条件的bean时，如果需要注入的接口有多个实现类，spring会如何解决]]></description><category></category></item></channel></rss>