mybatie+spring+mvc使用反射遇到的问题

问题1:使用反射调用*serviceImpl时,使用注解的*Dao对象是空,解决办法在*serviceImpl类中,直接去spring容器获取bean
问题2;在一个类TestServiceImple的方法中(使用事务控制)中调用另外一个类SupplementaryBudgetServiceImpl的方法(事务控制),另外一个类SupplementaryBudgetServiceImpl的方法在数据库中不会commit。

@Service
@Transactional
public class TestServiceImple implements TestService{
public void test1() {

 String className="SupplementaryBudget";
 Properties properties=new Properties();
 String rootpath=Thread.currentThread().getContextClassLoader().getResource("").getPath();
 BufferedReader read=new BufferedReader(new FileReader(rootpath+"properties/workFlowClass.properties"));
        properties.load(read);
        String FullclassName = properties.getProperty(className);
        Class   bean = Class.forName(FullclassName);

        //获取构造方法
        Constructor con=bean.getDeclaredConstructor(Integer.class,Character.class);
        //通过构造方法实例化
        Object obj=con.newInstance(id,state);

        //通过反射调用*serviceIMPl的updateState方法
        String FullclassNameServiceImpl = properties.getProperty(className+"ServiceImpl");
        Class   serviceImpl = Class.forName(FullclassNameServiceImpl);
        Method m=serviceImpl.getDeclaredMethod("updateState",bean);
        Object obj2=serviceImpl.getConstructor().newInstance();
        Object o=m.invoke(obj2, obj);//执行方法
}
}


---------------------------------------------------
@Service
@Transactional
public class SupplementaryBudgetServiceImpl   implements SupplementaryBudgetService{

@Autowired
private SupplementaryBudgetDao supplementaryBudgetDao;

public void updateState(SupplementaryBudget supplementaryBudget) {
        supplementaryBudgetDao.updateState(supplementaryBudget);
    }

}
问题1:supplementaryBudgetDao是null

解决:直接从Spring上下文中获取bean
@Service
@Transactional
public class SupplementaryBudgetServiceImpl   implements SupplementaryBudgetService{

    public static ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");

    public static Object getBean(String serviceName){
          return context.getBean(serviceName);
    }


public void updateState(SupplementaryBudget supplementaryBudget) {
    if(supplementaryBudgetDao==null){
        System.out.println("11111111");
        SupplementaryBudgetDao supplementaryBudgetDao = (SupplementaryBudgetDao)getBean("supplementaryBudgetDao");
        supplementaryBudgetDao.updateState(supplementaryBudget);
    }else{
        supplementaryBudgetDao.updateState(supplementaryBudget);
    }

}

问题2:
TestServiceImple的test1方法,使用反射,调用SupplementaryBudgetServiceImpl类的updateState方法,
结果:数据库有做sql的update语句,但是执行完没有进行事务的提交
解决方法:不要在事务控制的方法中,调用别的事务控制的方法。可以把test1的方法写到control层.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值