mybatie+spring+mvc使用反射遇到的问题
2017-09-17 13:35
661 查看
问题1:使用反射调用*serviceImpl时,使用注解的*Dao对象是空,解决办法在*serviceImpl类中,直接去spring容器获取bean
问题2;在一个类TestServiceImple的方法中(使用事务控制)中调用另外一个类SupplementaryBudgetServiceImpl的方法(事务控制),另外一个类SupplementaryBudgetServiceImpl的方法在数据库中不会commit。
问题2:
TestServiceImple的test1方法,使用反射,调用SupplementaryBudgetServiceImpl类的updateState方法,
结果:数据库有做sql的update语句,但是执行完没有进行事务的提交
解决方法:不要在事务控制的方法中,调用别的事务控制的方法。可以把test1的方法写到control层.
问题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层.
相关文章推荐
- 在spring-mvc中使用swagger2遇到的问题汇总
- Eclipse RCP使用Spring时遇到的问题及解决过程
- MVC 2.0+Entity Framework在使用依赖注入时遇到的问题
- 使用ASP.NET MVC 2编程时遇到的两个小问题
- MVC3开发常常遇到的问题及常常使用到的代码片段
- 在spring中使用quartz进行任务调度遇到的问题
- 使用C#的反射机制时遇到的问题
- 使用 spring aop 在DispatchAction中遇到的问题
- Spring3 MVC使用@ResponseBody的乱码问题及解决办法
- spring mvc使用过程中关于spring:bind和绑定java.util.Date遇到的问题
- Spring3 MVC使用@ResponseBody的乱码问题及解决办法
- 使用C#的反射机制时遇到的问题
- 使用spring遇到问题 事物不提交和更新失败
- 使用Spring-Jms监听ActiveMQ时遇到的问题
- 使用C#的反射机制时遇到的问题
- 使用C#的反射机制时遇到的问题
- 使用spring过程中遇到:小问题
- 使用C#的反射机制(AssemblyInfo)时遇到的问题
- 记从安装centos系统在到使用mono3.2部署MVC过程遇到的问题
- 使用C#的反射机制时遇到的问题