package com.spring.proxy; public interface PersonDao { public void savePerson(); } package com.spring.proxy; public class PersonDaoImpl implements PersonDao { @Override public void savePerson() { System.out.println("save person"); } } package com.spring.proxy; public class Transaction { public void beginTransaction(){ System.out.println("begin transcation"); } public void commit(){ System.out.println("commit"); } } 代理类 package com.spring.proxy; public class personDaoProxy implements PersonDao { private PersonDao personDao; private Transaction transaction; public personDaoProxy(PersonDao personDao,Transaction transaction) { super(); this.personDao = personDao; this.transaction=transaction; } /** * 由于该静态代理实现了PersonDao,所以每个方法都会执行开启事务提交事务,并没有做到事务的重用 * */ @Override public void savePerson() { transaction.beginTransaction(); personDao.savePerson(); transaction.commit(); } } package com.spring.proxy; import org.junit.Test; public class ProxyTest { @Test public void tsst(){ PersonDao personDao=new PersonDaoImpl(); Transaction transaction=new Transaction(); personDaoProxy personDaoProxy=new personDaoProxy(personDao, transaction); personDaoProxy.savePerson(); } }
1.静态代理并没有做到事务的重用
2.假设dao层有100个类,需要有100个proxy,接口中有多少方法,在proxy层就得实现多少方法,有多少方法就要开起和提交多少事务
3.如果一个proxy实现了多个接口,其中的一个接口发生变化(添加了一个方法),那么proxy也要做相应的改变
时间: 2024-07-30 20:31:43