JDK中Proxy实现切面编程

切面编程:对类中的方法设置权限

JDK中Proxy实现AOP举例

PersonService.java

package com.aop.service;

public interface PersonService {
	public String getUser();
	public void save();
	public void update();
}


PersonServiceImpl.java

package com.aop.service.impl;

import com.aop.service.PersonService;

public class PersonServiceImpl implements PersonService{
	private String user = null;
	
	public PersonServiceImpl() {
	}
	
	public PersonServiceImpl(String user){
		this.user = user;
	}
	public String getUser() {
		return user;
	}
	
	public void save() {
		
		System.out.println("save()");
	}

	public void update() {
		System.out.println("update()");

	}
}

JDKProxyFactory.java

package com.aop.factory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.aop.service.impl.PersonServiceImpl;

public class JDKProxyFactory implements InvocationHandler {
	private Object targetObject;
	public Object createProxyInstance(Object targetObject){
		this.targetObject = targetObject;
		return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(),
				this.targetObject.getClass().getInterfaces(), this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		PersonServiceImpl service = (PersonServiceImpl) this.targetObject;
		Object result = null;
		if(service.getUser() != null){
			result = method.invoke(targetObject, args);
		}
		return result;
	}
}

测试类:AOPTest.java

package com.aop.junit;

import com.aop.factory.JDKProxyFactory;
import com.aop.service.PersonService;
import com.aop.service.impl.PersonServiceImpl;

public class AOPTest {

	public static void main(String[] args) {
		JDKProxyFactory factory = new JDKProxyFactory();
		PersonService service = (PersonService) factory.createProxyInstance(new PersonServiceImpl());
		service.save();

	}
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值