问题描述
- 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 初始化方法就可以
时间: 2024-10-31 05:28:13