Spring Boot中如何使用反射获取Bean并调用呢?

戚薇 SpringBoot 发布时间:2023-06-11 23:13:15 阅读数:9054 1
下文笔者讲述不使用Autowire或resource注解,
使用反射的方式调用bean的方法分享,如下所示

反射调用bean的实现思路

1.实现一个ApplicationContextAware接口
  获取上下文信息ApplicationContext
2.此处就可以定义一个方法获取bean信息
3.获取bean信息后,即可使用反射运行其中的方法
例:获取bean中的方法,并运行
 
package com.java265.bean;
 
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class SpringContextUtil implements ApplicationContextAware {
 
    private static ApplicationContext applicationContext;
 
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
 
        SpringContextUtil.applicationContext = applicationContext;
    }
 
 
    public static Object getBean(String name) throws BeansException{
 
        return applicationContext.getBean(name);
    }
}


package com.java265.utils;
import com.java265.bean.SpringContextUtil; 
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
public class TestClass {

    public static Object getAllObject(String tableName, String methodName)
	    throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

        String tName = tableName + "ServiceImpl";
        Class cls = SpringContextUtil.getBean(tName).getClass();
        Method m = cls.getDeclaredMethod(methodName);
        Object invoke = m.invoke(SpringContextUtil.getBean(tName)); 
        return invoke;
    }
 
    public static Object getOneObjectByID(String tableName, String methodName, String id)
	    throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        String tName = tableName + "ServiceImpl";
        Class cls = SpringContextUtil.getBean(tName).getClass();
        Method m = cls.getDeclaredMethod(methodName, String.class);
        Object invoke = m.invoke(SpringContextUtil.getBean(tName), id);
        return invoke;
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202306/6766.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者