Spring学习 9

来源:互联网 发布:女生袜子知乎 编辑:程序博客网 时间:2024/05/01 19:38

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;@Overridepublic void save(String name) {System.out.println("UserServiceImpl 的 save方法" + name);}@Overridepublic void update(String name, int id) {System.out.println("UserServiceImpl 的 update方法" + name);}@Overridepublic String getUsername(int id) {System.out.println("UserServiceImpl 的 getUsername方法" + id);return null;}@Overridepublic 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>);}@Overridepublic 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 {@Testpublic 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
原创粉丝点击