- The configuration of the report circular reference warning
/** * Data Source Configuration * Data Source configuration Personally think it's better to be XML. Add configuration with XML configuration change only restart * * @author doctor * * @time March 3, 2015 PM 2:57:10 */@Configurationpublic class Datasourceconfig {@Bea n public static Propertysourcesplaceholderconfigurer Propertysourcesplaceholderconfigurer () {return new Propert Ysourcesplaceholderconfigurer (); } @Target (Elementtype.type) @Retention (retentionpolicy.runtime) @Documented public @interface DbH2 {}/ * * H2 Data Original configuration * Do not import, reason document see: {@code configuration} document with nested configuration classes part * How to handle the spring source code see : * {@link org.springframework.context.annotation.configurationclassparser#processmemberclasses ( ConfigurationClass, Sourceclass)} * * @author doctor * * @time March 3, 2015 afternoon 3:26:15 */@Configurat Ion @MapperScan (basepackages = {"Com.doctor.spring4.common.mapper"}, Annotationclass = Dbh2.class, Sqlsessionfactoryr EF = "Dbh2sqlsessionfactory") @PropertySource ("Classpath:/spring4_2015pro/jdbc-h2.properties")Static class Mybatish2config {@Value ("${jdbc. H2.url} ") Private String URL; @Value ("${jdbc. H2.user} ") private String user; @Value ("${jdbc. H2.password} ") private String password; @Value ("${jdbc. H2.driverclassname} ") Private String driverclassname; @Value ("${jdbc. H2.initialsize} ") private int initialsize; @Value ("${jdbc. H2.minidle} ") private int minidle; @Value ("${jdbc. H2.maxactive} ") private int maxactive; @Value ("${jdbc. H2.maxwait} ") Private long maxwait; @Value ("${jdbc. H2.minevictableidletimemillis} ") Private long minevictableidletimemillis; @Value ("${jdbc. H2.timebetweenevictionrunsmillis} ") Private long timebetweenevictionrunsmillis; @Value ("${jdbc. H2.validationquery} ") Private String validationquery; @Value ("${jdbc. H2.testwhileidle} ") Private Boolean testwhileidle; @Value ("${jdbc. H2.testonborrow} ") PrivaTe Boolean testonborrow; @Value ("${jdbc. H2.testonreturn} ") Private Boolean Testonreturn; @Value ("${jdbc. H2.poolpreparedstatements} ") Private Boolean poolpreparedstatements; @Value ("${jdbc. H2.maxpoolpreparedstatementperconnectionsize} ") private int maxpoolpreparedstatementperconnectionsize; @Bean (name = "Dbh2datasource", Initmethod = "Init", Destroymethod = "close") public DataSource Dbh2datasource () { Druiddatasource Druiddatasource = new Druiddatasource (); Druiddatasource.seturl (URL); Druiddatasource.setusername (user); Druiddatasource.setpassword (password); Druiddatasource.setdriverclassname (Driverclassname); Druiddatasource.setinitialsize (initialsize); Druiddatasource.setminidle (Minidle); Druiddatasource.setmaxactive (maxactive); Druiddatasource.setmaxwait (maxwait); Druiddatasource.setminevictableidletimemillis (MinevictabLeidletimemillis); Druiddatasource.settimebetweenevictionrunsmillis (Timebetweenevictionrunsmillis); Druiddatasource.setvalidationquery (Validationquery); Druiddatasource.settestwhileidle (Testwhileidle); Druiddatasource.settestonborrow (Testonborrow); Druiddatasource.settestonreturn (Testonreturn); Druiddatasource.setpoolpreparedstatements (poolpreparedstatements); Druiddatasource.setmaxpoolpreparedstatementperconnectionsize (maxpoolpreparedstatementperconnectionsize); return druiddatasource; } @Bean (name = "Dbh2sqlsessionfactory") @Resource (name = "Dbh2datasource") public sqlsessionfactory D Bh2sqlsessionfactory (DataSource DataSource) throws Exception {Sqlsessionfactorybean Sqlsessionfactorybean = NE W Sqlsessionfactorybean (); Sqlsessionfactorybean.setdatasource (DataSource); Sqlsessionfactorybean.settypehandlerspackage (""); SqlsessionFactorybean.setconfiglocation (New Classpathresource ("/spring4_2015config/mybatis-db-config.xml")); return Sqlsessionfactorybean.getobject (); } }}
Dbh2datasource,dbh2sqlsessionfactory,mapperscan has a dependency relationship.
- If the Mapperscan is configured separately, there will be no warning, for example:
/** * Data Source Configuration * Data Source configuration Personally think it's better to be XML. Add configuration with XML configuration change only restart * * @author doctor * * @time March 3, 2015 PM 2:57:10 */@Configurationpublic class Datasourceconfig {@Bea n public static Propertysourcesplaceholderconfigurer Propertysourcesplaceholderconfigurer () {return new Propert Ysourcesplaceholderconfigurer (); } @Target (Elementtype.type) @Retention (retentionpolicy.runtime) @Documented public @interface DbH2 {}/ * * H2 Data Original configuration * Do not import, reason document see: {@code configuration} document with nested configuration classes part * How to handle the spring source code see : * {@link org.springframework.context.annotation.configurationclassparser#processmemberclasses ( ConfigurationClass, Sourceclass)} * * @author doctor * * @time March 3, 2015 afternoon 3:26:15 */@Configurat Ion @PropertySource ("Classpath:/spring4_2015pro/jdbc-h2.properties") static class Mybatish2config {@Value ("$ {jdbc. H2.url} ") Private String URL; @Value ("${jdbc. H2.user} ") Private String useR @Value ("${jdbc. H2.password} ") private String password; @Value ("${jdbc. H2.driverclassname} ") Private String driverclassname; @Value ("${jdbc. H2.initialsize} ") private int initialsize; @Value ("${jdbc. H2.minidle} ") private int minidle; @Value ("${jdbc. H2.maxactive} ") private int maxactive; @Value ("${jdbc. H2.maxwait} ") Private long maxwait; @Value ("${jdbc. H2.minevictableidletimemillis} ") Private long minevictableidletimemillis; @Value ("${jdbc. H2.timebetweenevictionrunsmillis} ") Private long timebetweenevictionrunsmillis; @Value ("${jdbc. H2.validationquery} ") Private String validationquery; @Value ("${jdbc. H2.testwhileidle} ") Private Boolean testwhileidle; @Value ("${jdbc. H2.testonborrow} ") Private Boolean testonborrow; @Value ("${jdbc. H2.testonreturn} ") Private Boolean Testonreturn; @Value ("${jdbc. H2.poolpreparedstatemenTS} ") Private Boolean poolpreparedstatements; @Value ("${jdbc. H2.maxpoolpreparedstatementperconnectionsize} ") private int maxpoolpreparedstatementperconnectionsize; @Bean (name = "Dbh2datasource", Initmethod = "Init", Destroymethod = "close") public DataSource Dbh2datasource () { Druiddatasource Druiddatasource = new Druiddatasource (); Druiddatasource.seturl (URL); Druiddatasource.setusername (user); Druiddatasource.setpassword (password); Druiddatasource.setdriverclassname (Driverclassname); Druiddatasource.setinitialsize (initialsize); Druiddatasource.setminidle (Minidle); Druiddatasource.setmaxactive (maxactive); Druiddatasource.setmaxwait (maxwait); Druiddatasource.setminevictableidletimemillis (Minevictableidletimemillis); Druiddatasource.settimebetweenevictionrunsmillis (Timebetweenevictionrunsmillis); Druiddatasource.setvalidatIonquery (Validationquery); Druiddatasource.settestwhileidle (Testwhileidle); Druiddatasource.settestonborrow (Testonborrow); Druiddatasource.settestonreturn (Testonreturn); Druiddatasource.setpoolpreparedstatements (poolpreparedstatements); Druiddatasource.setmaxpoolpreparedstatementperconnectionsize (maxpoolpreparedstatementperconnectionsize); return druiddatasource; } @Bean (name = "Dbh2sqlsessionfactory") @Resource (name = "Dbh2datasource") public sqlsessionfactory D Bh2sqlsessionfactory (DataSource DataSource) throws Exception {Sqlsessionfactorybean Sqlsessionfactorybean = NE W Sqlsessionfactorybean (); Sqlsessionfactorybean.setdatasource (DataSource); Sqlsessionfactorybean.settypehandlerspackage (""); Sqlsessionfactorybean.setconfiglocation (New Classpathresource ("/spring4_2015config/mybatis-db-config.xml")); Return Sqlsessionfactorybean.getobject(); }} @Configuration @MapperScan (basepackages = {"Com.doctor.spring4.common.mapper"}, Annotationclass = Dbh2.clas s, sqlsessionfactoryref = "Dbh2sqlsessionfactory") static class Mybatismapperconfig {//Mapperscan annotations do not and data source defined configuration Written together, (as in Mybatish2config configuration),//No This causes a circular reference to initialize the bean problem. It seems that the XML configuration still has advantages//03-11 17:01:50.010 main WARN O.s.b.f.s.defaultlistablebeanfactory-bean creation//EXC Eption on Factorybean type check://Org.springframework.beans.factory.BeanCreationException:Error Creating Bean W ITH name//' usermapper ' defined in file//[/home/cui/workspace/spring4-2015/target/classes/com/doctor/spri Ng4/common/mapper/usermapper.class]://cannot resolve reference to beans ' dbh2sqlsessionfactory ' while setting bean Property//' sqlsessionfactory '; Nested exception is//Org.springframework.beans.factory.BeanCurrentlyInCreationException:Error creating Bean with Name ' Dbh2sqlsessiOnfactory ': Requested Bean is currently in creation:is there AN//unresolvable circular reference? }}
- but the best configuration is as follows:
/** * Data Source Configuration * Data Source configuration Personally think it's better to be XML. Add configuration changes with XML configuration just restart * * Note: Two dependent bean injection methods in the Mybatish2config class, do not inject in the form of a set method, and may cause injection circular reference problems. (@MapperScan annotations are mybatish2config, and annotations depend on the bean definition inside). * @author Doctor * * @time March 3, 2015 afternoon 2:57:10 */@Configurationpublic class Datasourceconfig {@Bean public static P Ropertysourcesplaceholderconfigurer Propertysourcesplaceholderconfigurer () {return new PROPERTYSOURCESPLACEHOLDERC Onfigurer (); } @Target (Elementtype.type) @Retention (retentionpolicy.runtime) @Documented public @interface DbH2 {}/ * * H2 Data Original configuration * Do not import, reason document see: {@code configuration} document with nested configuration classes part * How to handle the spring source code see : * {@link org.springframework.context.annotation.configurationclassparser#processmemberclasses ( ConfigurationClass, Sourceclass)} * * @author doctor * * @time March 3, 2015 afternoon 3:26:15 */@Configurat Ion @MapperScan (basepackages = {"Com.doctor.spring4.common.mapper"}, Annotationclass = Dbh2.class, Sqlsessionfactoryref = "Dbh2sqlsessionfactory") @PropertySource ("Classpath:/spring4_2015pro/jdbc-h2.properties") s Tatic class Mybatish2config {@Value ("${jdbc. H2.url} ") Private String URL; @Value ("${jdbc. H2.user} ") private String user; @Value ("${jdbc. H2.password} ") private String password; @Value ("${jdbc. H2.driverclassname} ") Private String driverclassname; @Value ("${jdbc. H2.initialsize} ") private int initialsize; @Value ("${jdbc. H2.minidle} ") private int minidle; @Value ("${jdbc. H2.maxactive} ") private int maxactive; @Value ("${jdbc. H2.maxwait} ") Private long maxwait; @Value ("${jdbc. H2.minevictableidletimemillis} ") Private long minevictableidletimemillis; @Value ("${jdbc. H2.timebetweenevictionrunsmillis} ") Private long timebetweenevictionrunsmillis; @Value ("${jdbc. H2.validationquery} ") Private String validationquery; @Value("${jdbc. H2.testwhileidle} ") Private Boolean testwhileidle; @Value ("${jdbc. H2.testonborrow} ") Private Boolean testonborrow; @Value ("${jdbc. H2.testonreturn} ") Private Boolean Testonreturn; @Value ("${jdbc. H2.poolpreparedstatements} ") Private Boolean poolpreparedstatements; @Value ("${jdbc. H2.maxpoolpreparedstatementperconnectionsize} ") private int maxpoolpreparedstatementperconnectionsize; @Bean (name = "Dbh2datasource", Initmethod = "Init", Destroymethod = "close") public DataSource Dbh2datasource () { Druiddatasource Druiddatasource = new Druiddatasource (); Druiddatasource.seturl (URL); Druiddatasource.setusername (user); Druiddatasource.setpassword (password); Druiddatasource.setdriverclassname (Driverclassname); Druiddatasource.setinitialsize (initialsize); Druiddatasource.setminidle (Minidle); Druiddatasource.setmaxactive (maxactive); Druiddatasource.setmaxwait (maxwait); Druiddatasource.setminevictableidletimemillis (Minevictableidletimemillis); Druiddatasource.settimebetweenevictionrunsmillis (Timebetweenevictionrunsmillis); Druiddatasource.setvalidationquery (Validationquery); Druiddatasource.settestwhileidle (Testwhileidle); Druiddatasource.settestonborrow (Testonborrow); Druiddatasource.settestonreturn (Testonreturn); Druiddatasource.setpoolpreparedstatements (poolpreparedstatements); Druiddatasource.setmaxpoolpreparedstatementperconnectionsize (maxpoolpreparedstatementperconnectionsize); return druiddatasource; } @Bean (name = "Dbh2sqlsessionfactory") public sqlsessionfactory dbh2sqlsessionfactory () throws Exception { Sqlsessionfactorybean Sqlsessionfactorybean = new Sqlsessionfactorybean (); Sqlsessionfactorybean.setdatasource (Dbh2datasource ()); SqlsessiOnfactorybean.settypehandlerspackage (""); Sqlsessionfactorybean.setconfiglocation (New Classpathresource ("/spring4_2015config/mybatis-db-config.xml")); return Sqlsessionfactorybean.getobject (); } }}
Spring+mybati Java config configuration causes the bean to cross-reference the log-report warning issue