场景描述:
知道 “类路径(比如说一个接口及其实现类这样子的),方法名,方法入参(入参不定长,类型已知)”的情况下,反射调用方法 并获取返回值。
调用方法 时发现,由于类内部有@Autowired注入的bean,然后这个bean为null,方法里用了这个成员就会报错~
分析:
其实是个比较简单的问题,实例获取的来源和Spring关联起来即可,只是因为本人基础不牢所以没考虑到,,网上类似的文章很多,但是都说的很乱,,而且代码也不全,,其实我觉得就一句话: 实例获取的来源和Spring关联起来即可。
解决方法:
1: 在 类里面判断注入的bean是否为空,如果为空去上下文获取一下~
这个方法当然是容易理解且可行的,但是要改类本身的代码,我这边不想改,所以没有采用
2: 获取类实例的时候从上下文获取,或者注入进来,而不是反射方式 class.newInstance (这样就没有和Spring关联起来获取bean,虽然也能拿到但是如果类里面用了@Autowired这张注入得到的对象就会为空……)
代码如下:
报上述错误的代码如注释处所示,
修正后的代码如非注释处所示,
最后一行代码是写文件,和文章说的没啥关系可以忽略。
private String billData =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<POST_INVOICE>\n" +
"\t<ACCT_NAME>ვლადიმერ ილიჩი ულიანოვი</ACCT_NAME>\n" +
"\t<BILL_ADDRESS>№26, პირველი ქუჩა, ცენტრალური