解决反射调用方法时获取bean失败的问题

 更新时间:2025年10月11日 08:38:19   作者:关老头  
文章描述了通过反射机制调用类方法时遇到的@Autowired注入失败和事务回滚失败的问题,原因是反射生成的对象未被SpringIOC容器管理,解决方案是通过applicationContext.getBean("className")方法获取Spring管理的bean来解决注入和事务问题

1、问题描述

通过反射机制调用某个类的方法时,此类内@Autowired注入失败,并且事务回滚失败。

2、原因

Class.forName(“className”).newInstance()

实例化对象后与Spring IOC容器无关(自己通过反射获取的对象,没有交给spring容器管理),所以@Autowired无法关联注入对象也无法支持事务。

3、解决方案

通过applicationContext.getBean(“className”)来获取bean。

@Component
public class SpringContextUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext; // Spring应用上下文环境

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringContextUtil.applicationContext == null){
            SpringContextUtil.applicationContext  = applicationContext;
        }
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }

    public static Object getBean(String name, Class requiredType)
            throws BeansException {
        return applicationContext.getBean(name, requiredType);
    }

    // 通过class获取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot依赖管理的源码解析

    SpringBoot依赖管理的源码解析

    这篇文章主要介绍了SpringBoot依赖管理的源码解析,maven提供了一套依赖管理机制,通过在pom.xml定义坐标,通过坐标从互联网的中央仓库下载依赖的构件(jar包),规范去管理依赖所有构件,这就叫依赖管理,需要的朋友可以参考下
    2023-04-04
  • SpringBoot部署到外部Tomcat无法注册到Nacos服务端的解决思路

    SpringBoot部署到外部Tomcat无法注册到Nacos服务端的解决思路

    这篇文章主要介绍了SpringBoot部署到外部Tomcat无法注册到Nacos服务端,本文给大家分享完美解决思路,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-03-03
  • Java打开浏览器访问指定页面的实现方法

    Java打开浏览器访问指定页面的实现方法

    在开发Java应用程序时,有时需要从程序中启动默认的Web浏览器并访问特定的网页,这在实现帮助文档链接、用户指南或在线资源导航等功能时非常有用,本文将介绍如何使用Java代码来实现这一功能,需要的朋友可以参考下
    2025-01-01
  • java synchronized实现可见性过程解析

    java synchronized实现可见性过程解析

    这篇文章主要介绍了java synchronized实现可见性过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java通过JNI 调用动态链接库DLL操作

    Java通过JNI 调用动态链接库DLL操作

    这篇文章主要介绍了Java通过JNI 调用动态链接库DLL操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 用IDEA如何打开文件夹

    用IDEA如何打开文件夹

    这篇文章主要介绍了用IDEA如何打开文件夹问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • debug模式迟迟不能启动问题及解决

    debug模式迟迟不能启动问题及解决

    在使用Debug模式进行代码测试时,由于设置了过多的断点,导致程序加载缓慢甚至无法启动,解决此问题的方法是取消不必要的断点,通过IDE的断点管理功能,检查并移除问题断点,从而优化调试效率,分享此经验希望能帮助遇到相同问题的开发者
    2022-11-11
  • java连接mongoDB并进行增删改查操作实例详解

    java连接mongoDB并进行增删改查操作实例详解

    这篇文章主要介绍了java连接mongoDB并进行增删改查操作,结合实例形式详细分析了java环境下MongoDB扩展包的下载、安装及操作MongoDB连接、增删改查等相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • Java线程池ForkJoinPool实例解析

    Java线程池ForkJoinPool实例解析

    这篇文章主要介绍了Java线程池ForkJoinPool实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 基于Jasypt对SpringBoot配置文件加密

    基于Jasypt对SpringBoot配置文件加密

    这篇文章主要介绍了基于Jasypt对SpringBoot配置文件加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论