Spring学习 9

AOP部分学习开始

满足需求,只有用户注册了的才能访问所有的方法。如果方法太多,肯定不能一个一个的if判断,所以引入java的动态代理。----前提条件是必须实现接口,不然Proxy就不能用了,解决方案是采用第三方的cglib来实现。


public interface UserService {

	public void save(String name);

	public void update(String name, int id);

	public String getUsername(int id);

	public void delete(int id);
}

public class UserServiceImpl implements UserService {

	private String username;
	
	@Override
	public void save(String name) {
		System.out.println("UserServiceImpl 的 save方法" + name);
	}

	@Override
	public void update(String name, int id) {
		System.out.println("UserServiceImpl 的 update方法" + name);
	}

	@Override
	public String getUsername(int id) {
		System.out.println("UserServiceImpl 的 getUsername方法" + id);
		return null;
	}

	@Override
	public void delete(int id) {
		System.out.println("UserServiceImpl 的 delete方法" + id);
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

}

public class RuiProxyFactory<T> implements InvocationHandler{

	public T targetObject;

	@SuppressWarnings("unchecked")
	public T createProxyInstance(T targetObject) {
		this.targetObject = targetObject;
		return (T) Proxy.newProxyInstance(targetObject.getClass()
				.getClassLoader(), targetObject.getClass().getInterfaces(),
				<strong style="background-color: rgb(153, 255, 153);">this</strong>);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		UserServiceImpl service = (UserServiceImpl) targetObject;
		Object result = null;
		if (service.getUsername() != null) {

			result = method.invoke(targetObject, args);
		}
		return result;
	}
}

public class UserServiceTest {

	@Test
	public void testProxy() {
		RuiProxyFactory<UserServiceImpl> proxy = new RuiProxyFactory<>();
		UserServiceImpl impl = new UserServiceImpl();
		impl.setUsername("xxxxx"); //这句话是关键点,直接决定了是否有权限
		UserService service = (UserService) proxy.createProxyInstance(impl);
		service.save("xxxx");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值