首页
技术
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

handazao

养家糊口
首页
技术
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Docker使用

  • 数据库相关

  • Java相关

    • HashMap
    • java反射
    • 属性比对器Equator
  • Linux学习

  • 工具

  • vue3

  • Git

  • 技术
  • Java相关
handazao
2020-10-22

java反射

//从ApplicationContext中取出已创建好的的对象
//不可直接反射创建serviceimpi对象,因为反射创建出来的对象无法实例化dao接口
ApplicationContext applicationContext = SpringBootBeanUtil.getApplicationContext();
//反射创建serviceimpi实体对象,和实体类
Class<?> ServiceImpl = Class.forName(serviceName);
//反射设置方法参数。
Method method = ServiceImpl.getMethod(serviceMethod, String.class);
//在ApplicationContext中根据class取出已实例化的bean
Object invoke = method.invoke(applicationContext.getBean(ServiceImpl), serviceParam);
if (invoke != null) {
    res = invoke;
}
1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class SpringBootBeanUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringBootBeanUtil.applicationContext == null) {
            SpringBootBeanUtil.applicationContext = applicationContext;
        }
        System.out.println("========ApplicationContext配置成功========");
        System.out.println("========在普通类可以通过调用SpringBootBeanUtil.getApplicationContext()获取applicationContext对象========");
        System.out.println("========applicationContext=" + SpringBootBeanUtil.applicationContext + "========");
    }

    /**
     * 获取applicationContext
     *
     * @return
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过name获取 Bean.
     *
     * @param name
     * @return
     */
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);
    }

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

    /**
     * 通过name,以及Clazz返回指定的Bean
     *
     * @param name
     * @param clazz
     * @return
     */
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#java反射
上次更新: 2022/12/06, 11:10:28
HashMap
属性比对器Equator

← HashMap 属性比对器Equator→

最近更新
01
pre-push
08-07
02
commit-msg
08-07
03
pre-commit
08-07
更多文章>
Theme by Vdoing | Copyright © 2020-2024 handazao | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式