前端时间开发过程中遇到在别的jar包中调用这边的业务功能,但是又不允许依赖那部分的jar包,所以只好使用反射的方式调用,但是正常的反射调用的方法需要是 public static 修饰的方法才能够调得到,但是static方法中调用注入对象的方法直接报红。所以找了另外一种方法来实现
首先,将注入对象正常使用@Autowired注入进来
@Autowired
private DataTraceRepository dataTraceRepository;
创建一个当前对象的静态变量,再添加一个init方法,方法要添加@PostConstruct注解
private static DataTraceServiceImpl dataTraceServiceImpl;
@PostConstruct
public void init() {
dataTraceServiceImpl = this;
dataTraceServiceImpl.dataTraceRepository = this.dataTraceRepository;
}
调用方法,使用当前对象的静态变量.注入对象.具体方法
/**
* 根据实体id查询实体的数据追溯
* @param entityId 实体Id
*/
public static List<DataTrace> count(Integer entityId) {
// 这里就这么调用
return dataTraceServiceImpl.dataTraceRepository.findAllByEntityId(entityId);
}
完整代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
/**
* description:<数据追溯业务层实现类>
*
* @author 武亚军
* @version 1.0
* @date 2020/12/26 下午4:52
*/
@Service
public class DataTraceServiceImpl implements DataTraceService {
@Autowired
private DataTraceRepository dataTraceRepository;
private static DataTraceServiceImpl dataTraceServiceImpl;
@PostConstruct
public void init() {
dataTraceServiceImpl = this;
dataTraceServiceImpl.dataTraceRepository = this.dataTraceRepository;
}
/**
* 根据实体id查询实体的数据追溯
* @param entityId 实体Id
*/
public static List<DataTrace> count(Integer entityId) {
// 这里就这么调用
return dataTraceServiceImpl.dataTraceRepository.findAllByEntityId(entityId);
}
}