ApplicationContext applicationContext = SpringContextUtils.getApplicationContext(); SqlSessionFactory sqlSessionFactory = applicationContext.getBean("sqlSessionFactory",SqlSessionFactory.class); SqlSession sqlSession = sqlSessionFactory.openSession(); Connection connection = sqlSession.getConnection(); String url = connection.getMetaData().getURL(); //拿到库名 String databaseName = extractDatabaseName(url); //解析sql拿到表名 String mybatisSql = SqlUtils.getMybatisSql(joinPoint,sqlSessionFactory); String tableName = mybatisSql.substring(7, mybatisSql.indexOf(" SET"));优化代码
时间: 2023-12-15 11:11:20 浏览: 149
可以将上述代码优化为:
```
@Autowired
private SqlSessionFactory sqlSessionFactory;
public String getTableName(JoinPoint joinPoint) throws SQLException {
SqlSession sqlSession = sqlSessionFactory.openSession();
Connection connection = sqlSession.getConnection();
String url = connection.getMetaData().getURL();
String databaseName = extractDatabaseName(url);
String mybatisSql = SqlUtils.getMybatisSql(joinPoint, sqlSessionFactory);
String tableName = mybatisSql.substring(7, mybatisSql.indexOf(" SET"));
return tableName;
}
```
这里使用了 `@Autowired` 注解来注入 `SqlSessionFactory` 对象,避免了手动获取 `ApplicationContext` 和从中获取 `SqlSessionFactory` 的过程,同时也不需要手动关闭 `SqlSession` 对象。
相关问题
ApplicationContext applicationContext = SpringContextUtils.getApplicationContext();为null
如果 `applicationContext` 为 `null`,可能是因为 `SpringContextUtils` 中获取 `applicationContext` 的代码有问题,或者在调用该方法之前,`applicationContext` 还没有被初始化。你可以先排查 `SpringContextUtils` 中获取 `applicationContext` 的代码是否正确。如果代码正确,可以检查在调用该方法之前是否已经完成了 `applicationContext` 的初始化。另外,也可以在 `Spring` 的配置文件中添加一个 `BeanPostProcessor`,用来检查 `applicationContext` 是否初始化完成。
ApplicationContext applicationContext = SpringContextUtil.getApplicationContext();解释这行代码
这行代码是通过 SpringContextUtil 工具类获取 ApplicationContext 对象,并将其赋值给 applicationContext 变量。
ApplicationContext 是 Spring 框架中的核心接口之一,它是一个容器,用于管理和组织应用程序中的 Bean 对象。通过 ApplicationContext,我们可以方便地获取 Bean 对象、管理 Bean 生命周期、处理事件等。SpringContextUtil 是一个自定义的工具类,用于获取 ApplicationContext 对象,通常用于在非 Spring 管理的类中获取 ApplicationContext 对象,以使用其中的 Bean 对象。
阅读全文