1、接口
package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public interface PersonDao {public void savePerson();
}
2、目标实现类
package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class PersonDaoImpl implements PersonDao {@Overridepublic void savePerson() {System.out.println("保存成功");}
}
3、事物类
package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class Transaction {public void beginTransaction() {System.out.println("开启事物");}public void Commit() {System.out.println("提交事物");}
}
4、代理类
package AOP.proxy;/*** Created by Administrator on 2019/6/11.*/
public class PersonProxy implements PersonDao {private PersonDao personDao;private Transaction transaction;public PersonProxy(PersonDao personDao,Transaction transaction) {this.personDao = personDao;this.transaction=transaction;}@Overridepublic void savePerson() {/*开启事物执行目标方法事物提交* */transaction.beginTransaction();personDao.savePerson();transaction.Commit();}
}
5、单元测试
package AOP.proxy;import org.junit.Test;/*** Created by Administrator on 2019/6/11.*/
public class ProxyTest {@Testpublic void ProxyTest() {PersonDao personDao = new PersonDaoImpl();Transaction transaction= new Transaction();PersonProxy personProxy = new PersonProxy(personDao,transaction);personProxy.savePerson();}
}
6、结果
开启事物
保存成功
提交事物
7、总结
目标:操作hibernate的时候,不在每次save、update的时候,开启和提交事物。
1、静态代理模式并没有做到事物的重用
2、假如Dao层有100个类,100个proxy,接口中有多少个方法,在proxy层就要实现多少个方法,有多少个方法,就要开启和提交多个事物
3、如果一个proxy实现了多个接口,如果其中的一个借口发生变化(添加一个方法),那么proxy也要做相应的变化。