Skip to main content

Inside spring framework from source code (2)

The most simple usage of Spring is to load xml definitions beans and use it.
We will go through the whole work flow based on spring unittest.
Go and check XmlBeanDefinitionReaderTests from package org.springframework.beans.factory.xml,

The method "withImport" show the simple workflow to load beans.


Let’s jump inside loadBeanDefinitions. The overview workflow is compromised by 3 steps as following: 

Validate Mode for resource.
The first main part is validate mode for resource.
As we know, XML had 2 type of validation: DTD VS XSD. The first step is check the file content to detect which mode we will parse the XML file.


Load document 

Convert the input stream to xml document.

Register Bean Definition

CreateDelegate: Return BeanDefinitaionParseDelegate class.  The actual implement class which parse the xml content and create Spring bean.



Before parse the actual bean, checking the profile at first. The working env should accept the profile of process defined in xml file.



After that, we finally reach the core function parseBeanDefinitions(root, this.delegate) to load beans. Let’s dive more into the this method. 

The simple logic here is that the code visit all children of root element if spring default name space or parseCustomElement for customized spring definition. parseDefaultElement define the detailed behavior to parse.

BeanDefinitionParserDelegate: Stateful delegate class used to parse XML bean definitions.

Delegate.isDefaultNamespace: “http://www.springframework.org/schema/beans" or empty. The bean definition is the regular spring bean definition. 
ParseDefaultElement will handle 4 types of spring beans .
  1. Import — importBeanDefinitionResource
  2. Alias — parseAliasRegistration
  3. Bean — parseBeanDefinition
  4. beans — doRegisterBeanDifinitions
  5. parseCustomElement will parse customized bean definition.
Let's go over each of type for the next steps.







Comments

Popular posts from this blog

How to fix "ValueError when trying to compile python module with VC Express"

When I tried to compile the python, I always get compile issue as following: ------------ ... File "C:\Python26\lib\ distutils\msvc9compiler.py ", line 358, in initialize vc_env = query_vcvarsall(VERSION, plat_spec) File "C:\Python26\lib\ distutils\msvc9compiler.py ", line 274, in query_vcvarsall raise ValueError(str(list(result.keys()))) ValueError: [u'path'] --------------------- Python community discussed a lot but no solution: http://bugs.python.org/issue7511 The root cause is because the latest visual studio change the *.bat file a lot especially on 64bit env. The python 2.7 didn't update the path accordingly. Based on the assumption above, the following solution worked for me. To install Visual Studio 2008 Express Edition with all required components: 1. Install Microsoft Visual Studio 2008 Express Edition. The main Visual Studio 2008 Express installer is available from (the C++ installer name is vcsetup.exe): https://ww...

How to convert the ResultSet to Stream

Java 8 provided the Stream family and easy operation of it. The way of pipeline usage made the code clear and smart. However, ResultSet is still go with very legacy way to process. Per actual ResultSet usage, it is really helpful if converted as Stream. Here is the simple usage of above: StreamUtils.uncheckedConsumer is required to convert the the SQLException to runtimeException to make the Lamda clear.

How to run odoo(openerp8) in IDE from source on windows

1. install python 2.7 (per openerp8's official doc, python 27 is required.) 2. download get-pip.py from https://bootstrap.pypa.io/get-pip.py , execute the command: python get-pip.py 3. get source of openerp8 from https://github.com/odoo/odoo.git 4. execute the command: pip install -r D:\source_code\odoo\openerp8/requirements.txt . (requirements.txt contains all dependencies. ) The pip will install the python module automatically. However, the real world always bring us the issues because our C++ compile environment is not setup correctly.  we will get the link error when pip try to install psycopg2 (driver to access postgresql db.). Go to  http://www.stickpeople.com/projects/python/win-psycopg/  and choose the compiled binary file directly. For Python-ldap, go to  http://www.lfd.uci.edu/~gohlke/pythonlibs/ 5. Finally, go to http://sourceforge.net/projects/pywin32/files/pywin32 and choose correct version for python-win32service. 6. If you are family with...