Spring 反射调用类中的@Autowired注解服务空指针

Spring 反射调用类中的@Autowired注解服务空指针

错误代码

  • 反射代码
// 反射调用对应服务函数并传递参数
Class serviceClass = Class.forName(serviceUri);
Object obj = serviceClass.newInstance();
// 调用serviceClass的invoke函数,并设置默认参数;
Method method = serviceClass.getMethod(invoke, String.class);
// 调用Method类的方法invoke运行invoke方法
Object object = method.invoke(obj, params);
  • 调用的有@Autowired注解的类
@Component
public class CompanyExecute {

    @Autowired
    private CompanyService companyServiceImpl;

    public boolean insertCompany(String companyVoString) {
        boolean insertFlag = companyServiceImpl.insertCompany(companyVoString);
        return insertFlag;
    }
}
  • @Autowired注解的类 (有@service注解,还是不好使!!)
@Service
public class CompanyServiceImpl implements CompanyService {
	
	@Override
    public boolean insertCompany(String companyVoString) {
        ....
    }
}

错误日志

3980	at java.lang.Thread.run(Thread.java:748)
 Caused by: java.lang.NullPointerException
--- 	at com.frank.sbr.action.consumer.execute.CompanyExecute.insertCompany(CompanyExecute.java:26)
[MessageThread_1]	... 13 more

解决方案

原因:反射的类无法被Spring进行管理。
解决:在使用前初始化一下(使用@PostConstruct注解)

  • 代码
public class CompanyExecute {

    public static CompanyExecute companyExecute;

    @Autowired
    private CompanyService companyServiceImpl;

    /**
     * 初始化当前类
     */
    @PostConstruct
    public void init() {
        companyExecute = this;
    }

    public boolean insertCompany(String companyVoString) {
        boolean insertFlag = companyExecute.companyServiceImpl.insertCompany(companyVoString);
        return insertFlag;
    }

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值