AOP的三种编程模式(第一种)

手动完成AOP编程
applicationContext.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
		<!-- 目标对象 -->
		<bean id="user" class="com.qhit.aop1.User"></bean>
		<!-- 切面对象 -->
		<bean id="aop1" class="com.qhit.aop1.Aop1"></bean>
		<!-- 代理生成器 -->
		<bean id="myProxy" class="com.qhit.aop1.MyProxy">
			<constructor-arg index="0" ref="user"></constructor-arg>
			<constructor-arg index="1" ref="aop1"></constructor-arg>
		</bean>		
</beans> 
package com.qhit.aop1;
/*
 * 手动完成AOP编程
 * 切面
 * */
public class Aop1 {
	public void begin(){
		System.out.println("用户开始登陆。。");
	}
	public void end(){
		System.out.println("用户已经下线。。");
	}
}
package com.qhit.aop1;

import java.lang.reflect.Method;

import org.springframework.cglib.proxy.InvocationHandler;
import org.springframework.cglib.proxy.Proxy;

public class MyProxy implements InvocationHandler {
	    //目标对象
		private Object target;
		private Aop1 aop;
		public MyProxy(Object target, Aop1 aop) {
			this.target = target;
			this.aop = aop;
		}
		//产生代理对象
		public Object bind(){
			return Proxy.newProxyInstance(
					target.getClass().getClassLoader()//获取目标对象的类加载器
					,target.getClass().getInterfaces()//获取实现的所有的接口
					, this);
		}//完成代理
	@Override           //student      .song           (参数);
	public Object invoke(Object arg0, Method arg1, Object[] arg2) throws Throwable {
		aop.begin();
		Object resul= arg1.invoke(target,arg2 );
		aop.end();
		return resul;
	}

}

package com.qhit.aop1;

public class User implements UserDao{
	//切点
	@Override
	public void login() {
		System.out.println("登陆成功。。");
		
	}

}


package com.qhit.aop1;
//接口
public interface UserDao {
	void login();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值