您的位置:首页 > 编程语言 > Java开发

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

2017-12-13 11:30 381 查看
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;

@Component
public class DBContextHolder{

@Autowired
private MongoDynamicTemplateSource dynamicTemplateSource;

private static DBContextHolder dbContextHolder;

private static final ThreadLocal<String> dbName = new ThreadLocal<String>();

private static final ThreadLocal<String> mongoTemplate = new ThreadLocal<String>();

@PostConstruct
public 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{
@Autowired
private D d;

private static O o;

@PostConstruct
public void init() {
o = this;
o.d = this.d;
}

public void setD(D dd) {
this.d = dd;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: