代码案例分析

  • Service层添加了注解@Transactional
@Service
@Transactional
public class CustomerService extends BaseService<CustomerModel, CustomerQueryModel> implements ICustomerService {
private CustomerDAO dao = null;
@Autowired
public void setDao(CustomerDAO dao) {
this.dao = dao;
super.setDao(dao);
}
}
  • Client端同时也增加了注解@Transactional
@Service
@Transactional
public class Client {
@Autowired
private ICustomerService s = null; public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Client t = (Client)ctx.getBean("client"); // CustomerModel cm = new CustomerModel();
// cm.setCustomerId("c1");
// cm.setPwd("c1");
// cm.setRegisterTime("");
// cm.setShowName("c1");
// cm.setTrueName("王五");
//
// t.dao.create(cm); CustomerQueryModel cqm = new CustomerQueryModel();
cqm.getPage().setNowPage(1); Page<CustomerModel> p = t.s.getByConditionPage(cqm); System.out.println("p=="+p);
}
}
  • 异常空指针错误信息
Exception in thread "main" java.lang.NullPointerException
at com.sishuok.architecture1.customermgr.Client.main(Client.java:38)

Client.java:38行报的异常错误信息,就是Page<CustomerModel> p = t.s.getByConditionPage(cqm);

经过分析,t对象肯定存在,只有s对象存在空指针,为什么呢?

原因是因为增加了@Transactional 之后,又被代理了一次,意思就是sprint的原始对象与代理对象的问题,s的原始对象是有的,但是t.s拿到的是@Transactional 代理过后的对象,t.s 和s 不是同一个对象,解决办法如下

@Service
@Transactional
public class Client {
@Autowired
private ICustomerService s = null; public ICustomerService getS() {
return s;
} public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Client t = (Client)ctx.getBean("client"); // CustomerModel cm = new CustomerModel();
// cm.setCustomerId("c1");
// cm.setPwd("c1");
// cm.setRegisterTime("");
// cm.setShowName("c1");
// cm.setTrueName("王五");
//
// t.dao.create(cm); CustomerQueryModel cqm = new CustomerQueryModel();
cqm.getPage().setNowPage(1); // Page<CustomerModel> p = t.s.getByConditionPage(cqm); Page<CustomerModel> p = t.getS().getByConditionPage(cqm); System.out.println("p=="+p);
}

一切正常,为什么可以解决?代理的时候通过方法进行访问(拦截的方法),属性的就没有正常的代理private ICustomerService s = null;

最新文章

  1. POJ 2337 Catenyms(有向图的欧拉通路)
  2. barManager 挤压后“ 自动换行”和“自动隐藏”的实现方法
  3. 使用Git命令上传本地项目
  4. UICollectionReusableView 使用时的一些问题
  5. [安卓] 18、一个简单的例子做自定义动画按钮和自定义Actionbar
  6. rsync安装使用
  7. HDU 4493 Tutor (控制精度)
  8. Apache Shiro 使用手册
  9. 【POJ3461】【KMP】Oulipo
  10. Grub禁用UUID
  11. python爬虫框架scrapy问题的解决
  12. FORM开发两种方式实现动态LIST
  13. 关于Opengl投影矩阵
  14. 前端开发【第二篇: css】
  15. DB2(Procedure)存储过程遍历循环!
  16. 检查服务器主从状态的脚本-check_server_state.sh
  17. Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
  18. purge recyclebin之后dba_segments仍然有BIN$段
  19. thinkphp5使用redis
  20. Android中数据的保存

热门文章

  1. EVE上传Dynamips、IOL和QEMU镜像
  2. 【译】高级T-SQL进阶系列 (三)【中篇】:理解公共表表达式(CTEs)
  3. 使用PIE.htc 进行IE兼容CSS3
  4. $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  5. 最新版自动检测卡片类型工具软件版本(auto check card type v3.2.0)
  6. 将信息存储在claim中,通过扩展AbpSession取出
  7. mongdb 复制集
  8. EasyUI tree的三种选中状态
  9. 例题3_4 猜数字游戏的提示(UVa340)
  10. Python:数值类型