spring的jdbcTemplate在静态方法中怎么使用?
问题描述:
public class UtilsDao {
@Autowired
@Qualifier("JdbcTemplate")
private static JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
UtilsDao.jdbcTemplate = jdbcTemplate;
}
public static JSONArray queryList2Json(String sql){
List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql);
JSONArray a = JSONArray.fromObject(lists);
System.out.println(a.toString());
return a;
}
}
请问下在静态方法中怎么获取不到jdbcTemplate实例?jdbcTemplate是个null值
答
不论是注入jdbcTemplate还是applicationContext,都有静态获取的问题,建议配置SpringContextUtil,存静态的context就可以了,其他的只需要getBean即可获取
答
不要使用静态方法,jdbcTemplate原本就是单例的。
答
那用的spring,在静态方法里怎么连接数据库请求数据?
还要用conn.prepareStatemate("")吗?
答
其实就是静态和普通的加载顺序问题导致没有注入实体。
可以换个思路,因为静态方法是在类加载的时候就已经读进JVM了,所以楼主可以再new完对象之后给再给jdbc赋值
答
思路是这样子的
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
public static JdbcTemplate staticJdbcTemplate;
@PostConstruct //在构造对象完之后调用初始化
public void init() {
class.staticJdbcTemplate = this.jdbcTemplate;
}
答
系统初始化的时候就应该生成实例,这样就可以,或者重写 spring 初始化方法就可以
答
我参考了一下
这样写
@Resource(name="jdbcTemplate")
private JdbcTemplate jdbcTemplate;
public static JdbcTemplate staticJdbcTemplate;
@PostConstruct //在构造对象完之后调用初始化
public void init() {
DbDate.staticJdbcTemplate = this.jdbcTemplate;
}