public class TenderAdminService extends BaseService<Tender> {
private LoanAdminService loanAdminService = LoanAdminService.me;
private void searchLoanIdList(){
//这个地方loanAdminService是null
loanIdList = loanAdminService.searchLoanIdList(loanCondition);
}
}
public class LoanAdminService extends BaseService<Loan> {
private TenderAdminService tenderAdminService = TenderAdminService.me;
}
代码大致如此。
注释的地方,为啥会出现为null呢?
普通代码,发现互相依赖没问题。
感觉是JFinal 或者 Model 的问题。
2个Service都继承了BaseService。
public abstract class BaseService<T extends Model<T>>
具体原因,没有明显看出来。
---------------------------------------------
import com.jfinal.plugin.activerecord.Model;
public class User extends Model {
public static User me = new User();
private static Cat cat = Cat.me;
public void hi(){
System.out.println("hi user start");
cat.hi();
}
public void hi2(){
System.out.println("hi2 user start");
}
public static void main(String[] args) {
User user = User.me;
user.hi();
Cat cat = Cat.me;
cat.hi();
}
}
import com.jfinal.plugin.activerecord.Model;
public class Cat extends Model {
private static User user = User.me;
public static Cat me =new Cat();
public void hi(){
System.out.println("hi cat start");
user.hi2();
}
}
写了2个测试例子,User和Cat,无论是否继承 JFinal的Model都没问题。
简单做个记录,提示今后,需要注意这个问题。毕竟已经多次遇到了。
目前想到的办法是,引入Manager层。
Manager层引入,简单的CRUD封装,Service负责业务实现和事务。
做到Service之间,尽可能避免互相引用。
不可避免的情况下,把那些核心的业务 做成一个单独的功能,也方便复用。
技术之路,很漫长呀。
做自己喜欢的。