Plug-in principle of Mybatis
Lu Chunli's work notes are not as good as bad notes.
Reproduced from: deep and simple Mybatis- plug-in principle
Mybatis uses the chain of responsibility model, through dynamic agents to organize multiple interceptors (plug-ins), through these interceptors can change the default behavior of Mybatis (such as SQL rewriting, etc.), because plug-ins will go deep into the core of Mybatis, it is best to understand its principles before writing their own plug-ins in order to write safe and efficient plug-ins.
Generation of Agent chain
Mybatis supports interception of Executor, StatementHandler, PameterHandler, and ResultSetHandler, which means that these four objects are proxied.
Let's take Executor as an example. When Mybatis creates an Executor object:
Org.apache.ibatis.session.SqlSessionFactory.openSession () org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSession () org.apache.ibatis.session.defaults.DefaultSqlSessionFactory.openSessionFromDataSource (execType, level, false) {final Executor executor = configuration.newExecutor (tx, execType);}
Description: the org.apache.ibatis.builder.xml.XMLConfigBuilder class parses the configuration file of MyBatis, gets the configured Interceptor and calls configuration.addInterceptor (interceptorInstance), and configures it in the interceptor chain.
Org.apache.ibatis.session.Configuration
Package org.apache.ibatis.session;public class Configuration {protected Environment environment; protected String logPrefix; protected Class