![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spring
jacobbbbbbbb
一个java学习者的学习笔记
展开
-
Spring事务源码解析(2)
处理已经存在的事务 private TransactionStatus handleExistingTransaction( TransactionDefinition definition, Object transaction, boolean debugEnabled) throws TransactionException { //如果是never模式就抛出错误 if (definition.getPropagationBehavior() == TransactionDefinit原创 2020-07-07 21:00:58 · 171 阅读 · 0 评论 -
Spring事务源码解析(1)
本文主要从注解式配置入手,例如@Transactional(propagation=Propagation.REQUIRED),而分析的逻辑开始部分是在 <tx:annotation-driver transaction-manager="transactionManager"/> 这是自定义标签实现在TxNamespaceHandler: public void init() { this.registerBeanDefinitionParser("advice",原创 2020-07-07 16:08:17 · 135 阅读 · 1 评论 -
SpringAOP源码阅读笔记
是否支持aop都是由一个配置文件控制的,也就是aop:aspectj-autoproxy。而这配置方式是自定义配置,因此spring需要注册对应的handler和解析器,通过寻找handler发现,在AopNamespaceHandler中有: @Override public void init() { // In 2.0 XSD as well as in 2.1 XSD. registerBeanDefinitionParser("config", new ConfigBeanDefini原创 2020-06-09 15:04:11 · 96 阅读 · 0 评论 -
SpringIOC源码阅读笔记(11)
5.注册BeanPostProcessor,注意是注册,调用在getbean方法中。 protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this); } public static void registerBeanPostP原创 2020-06-05 13:45:57 · 78 阅读 · 0 评论 -
SpringIOC源码阅读笔记(10)
分析完BeanFactory容器的加载,接下来看一下更复杂的容器ApplicationContext的加载,这个容器也是我们目前使用比较多的容器。跟BeanFactory比起来,ApplicationContext有如下区别: 1.继承 MessageSource,提供国际化的标准访问策略。 2.继承 ApplicationEventPublisher ,提供强大的事件机制。 3.扩展 ResourceLoader,可以用来加载多个 Resource,可以灵活访问不同的资源。 4.对 Web 应用的支持。原创 2020-06-05 12:44:08 · 159 阅读 · 0 评论 -
SpringIOC源码阅读笔记(9)
bean的创建的最后一步是初始化bean: protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) { if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -> {原创 2020-06-03 13:43:46 · 89 阅读 · 0 评论 -
SpringIOC源码阅读笔记(8)
上文讲到了创建bean总共有4种方法,已经分析了2种,分别是supplier获取以及工厂方法获取,接下来讲第三种: protected BeanWrapper autowireConstructor( String beanName, RootBeanDefinition mbd, @Nullable Constructor<?>[] ctors, @Nullable Object[] explicitArgs) { return new ConstructorResolver(th原创 2020-06-02 22:48:41 · 132 阅读 · 0 评论 -
SpringIOC源码阅读笔记(7)
创建bean的实现在AbstractAutowireCapableBeanFactory,入口是: @Override protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException { if (logger.isDebugEnabled()) { logger.debug("Creating instanc原创 2020-06-02 15:36:54 · 162 阅读 · 0 评论 -
SpringIOC源码阅读笔记(6)
从本文开始进行bean的加载过程的解析。 同样的我们可以从一行代码开始:MyTestBean bean = (MyTestBean)bf.getBean(“myTestBean”); 首先进入AbstractBeanFactory: @Override public Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false); } 代码很长,可以了解获得Bean的主要流程原创 2020-06-02 10:59:41 · 103 阅读 · 0 评论 -
SpringIOC源码阅读笔记(5)
分析完默认标签的解析,接下来分析自定义标签的解析: 方法的入口是在DefaultBeanDefinitionDocumentReader的parseBeanDefinitions方法中,转到parseCustomElement, @Nullable public BeanDefinition parseCustomElement(Element ele) { return parseCustomElement(ele, null); } @Nullable public BeanDefiniti原创 2020-05-30 12:12:38 · 102 阅读 · 0 评论 -
SpringIOC源码阅读笔记(4)
上文讲到parsePropertySubElement,分析完这个方法,接着在parseBeanDefinitionElement向下分析: public void parsePropertyElements(Element beanEle, BeanDefinition bd) { NodeList nl = beanEle.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i原创 2020-05-29 23:00:20 · 148 阅读 · 0 评论 -
SpringIOC源码阅读笔记(3)
上篇笔记写到解析element分为解析默认标签以及自定义标签,本文就先从默认标签开始。 public static final String IMPORT_ELEMENT = "import"; public static final String ALIAS_ATTRIBUTE = "alias"; //bean public static final String BEAN_ELEMENT = BeanDefinitionParserDelegate.BEAN_ELEMENT; public stati原创 2020-05-29 17:08:13 · 151 阅读 · 0 评论 -
SpringIOC源码阅读笔记(2)
整个ioc的过程可以分为3个步骤: 1.资源定位,根据location找到对应的资源。 2.装载,将资源解析到对应的beanDefinition。 3.注册,将beanDefinition中的对象注册进容器。 给一个简单的例子,后面的分析也将从这个例子中展开 BeanFactory bf= new XmlBeanFactory(new ClassPathResource(“beanFactory.xml”)) classpathresource的定位就不细说了, //XmlBeanFactory的主要实现都原创 2020-05-28 22:51:07 · 138 阅读 · 0 评论 -
SpringIOC源码阅读笔记(1)
刚看完springMVC的源码,感觉spring的容器源码还是掌握不到位,所以打算写一点笔记再理一遍思路。 一.Resource spring给资源提供了封装,根据不同的资源类型有不同的实现类,首先先看下UML图: 1.org.springframework.core.io.InputStreamSource 顶层接口,其中就定义了一个方法获取输入流: InputStream getInputStream() throws IOException 2.org.springframework.core.io原创 2020-05-28 14:02:56 · 218 阅读 · 0 评论