spring注入bean进入工具类的静态方法

来源:互联网 发布:阿里云url中文乱码 编辑:程序博客网 时间:2024/06/06 01:51

package com.caiwufei.common.db;import javax.annotation.PostConstruct;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.stereotype.Component;import com.caiwufei.common.db.mongo.MongoDynamicTemplateSource;@Componentpublic class DBContextHolder{@Autowiredprivate MongoDynamicTemplateSource dynamicTemplateSource;private static DBContextHolder dbContextHolder;private static final ThreadLocal<String> dbName = new ThreadLocal<String>();private static final ThreadLocal<String> mongoTemplate = new ThreadLocal<String>();        @PostConstructpublic void init() {dbContextHolder = this;dbContextHolder.dynamicTemplateSource = this.dynamicTemplateSource;}public void setMongoTemplateSource(MongoDynamicTemplateSource mongoTemplateSource) {this.dynamicTemplateSource = mongoTemplateSource;}public static class DB {public static void changeTargetDataSource(String dataKey){dbName.set(dataKey);}public static String getTargetDataSource(){return dbName.get();}}public static class Mongo {public static void changeTargetMongoTemplate(String mongoTemplateKey){mongoTemplate.set(mongoTemplateKey);}public static String getTargetMongoTemplate(){return mongoTemplate.get();}}public static MongoTemplate mongoTemplate() {return dbContextHolder.dynamicTemplateSource.getMongoTemplate();}}


看上面的代码,工具类DBContextHolder中注入了private MongoDynamicTemplateSource dynamicTemplateSource动态的mongodb模板。

通过设计这个工具类,既是spring中的一个bean,又是一个工具类,静态方法可以直接DBContextHolder.Mongo.getTargetMongoTemplate();这样使用。

模板大致如下:

class O{@Autowiredprivate D d;private static O o;@PostConstructpublic void init() {o = this;o.d = this.d;}public void setD(D dd) {this.d = dd;}}