标签:springaop
代理模式
对代码增强
静态代理模式的缺点:
1、如果一个系统中有100Dao,则创建100个代理对象
2、如果一个dao中有很多方法需要事务,则代理对象的方法中重复代码还是很多
3、由第一点和第二点可以得出:proxy的重用性不强
例子:利用代理类和被代理的类实现相同的接口,在代理类中构造方法放入被代理类对象和要添加的功能。
接口personDao.java
public interface PersonDao {
public void savePerson();}
实现类
public class PersonDaoImpl implements PersonDao{
public void savePerson() {
System.out.println("save person");}
事务处理类
public class Transaction {
public void beginTransaction(){
System.out.println("开启事务");}
public void commit(){
System.out.println("关闭事务");}
}
dao代理对象
public class PersonDaoProxy implements PersonDao{
private PersonDao personDao;
private Transaction transaction;
public PersonDaoProxy( PersonDao personDao, Transaction transaction){
this.personDao = personDao;
this.transaction = transaction;}
public void savePerson() {
transaction.beginTransaction();
personDao.savePerson();
transaction.commit();}}
对象产生:applicationContext.xml
<bean id="personDao" class="proxy.cn.itcast.proxy.PersonDaoImpl" ></bean>
<bean id="transaction" class="proxy.cn.itcast.proxy.Transaction" ></bean>
<bean id="personDao2" class="proxy.cn.itcast.proxy.PersonDaoProxy">
<constructor-arg index="0" ref="personDao"></constructor-arg>
<constructor-arg index="1" ref="transaction"></constructor-arg>
</bean>
测试
public class ProxyTest {
@Test
public void testPersonDao(){
ApplicationContext context = new ClassPathXmlApplicationContext("/proxy/cn/itcast/proxy/aplicationContext-proxy.xml");
PersonDao dao = (PersonDao) context.getBean("personDao2");//这是代理类了
dao.savePerson();}}
标签:springaop
原文地址:http://8477424.blog.51cto.com/8467424/1769830