AOP面向切面编程

2 AOP 面向切面编程

当软件系统功能需要扩展时(添加一个新的功能),不能在原始代码上进行修改,而是以横切面的方式加入到系统中,当不需要这个功能时,可以把横切面直接撤走,不会影响系统原始的功能。
就像一个多层的抽屉,抽哪个就用哪个。
AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。
接下来看一些概念
在这里插入图片描述
接下来 看个静态代理的例子 这是项目结构
在这里插入图片描述
其中的userDaoImpl和userDaoImplProxy都实现了UserDao这个接口。
然后我现在要给userDaoImpl加新的功能 实现处理日志
我没有直接去修改userDaoImpl的源码 而是添加了userDaoImplProxy
userDaoImplProxy就是userDaoImpl的代理类。
当我想使用具有处理日志的功能时 我就使用 userDaoImplProxy
当不想使用 处理日志时 我就使用userDaoImpl类

这是userDaoImplProxy
package com.xindian.proxy;

import java.util.List;

import com.xindian.dao.UserDao;
import com.xindian.dao.impl.userDaoImpl;
import com.xindian.pojo.User;
import com.xindian.util.CreateLog;

public class UserDaoImplProxy implements UserDao{

	private userDaoImpl userDaoImpl;
	public void UserDaoImplProxy(userDaoImpl userDaoImpl)
	{
		this.userDaoImpl=userDaoImpl;
	}
	
	
	@Override
	public void save(User user) {
		// TODO Auto-generated method stub
		CreateLog.log();
		try {
			userDaoImpl.save(user);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
package com.xindian.dao.impl;
import com.xindian.dao.UserDao;
import com.xindian.pojo.User;
import com.xindian.util.CreateLog;
public class userDaoImpl implements UserDao {
	private JdbcTemplate template;
	public JdbcTemplate getTemplate() {
		return template;
	}
	public void setTemplate(JdbcTemplate template) {
		this.template = template;
	}
	@Override
	public void save(User user) throws Exception{
		// TODO Auto-generated method stub
		String sql="insert into user(name,age) values(?,?)";
		//插入的参数
		Object []args=new Object[]{user.getName(),user.getAge()};
		//插入的类型
		int[]argTypes=new int[]{Types.VARCHAR,Types.VARCHAR};
		template.update(sql, args, argTypes);	
	}
	}

在UserDaoImplProxy中save()方法中调用的这个处理日志的方法CreateLog.log();就是通知
这个UserDaoImplProxy就是切面,调用通知的这个save()方法就是切入点。
以上为本人的学习记录,如有错误,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值