[学习资料来自尚学堂公布之视频]
[前面已经转了几篇有关静态/动态代理的帖子.写的都很不错.自己也跟着视频敲了几篇代码.
现在贴出来.算是有有始有终吧.]
1.UserManager接口
3.动态代理的类safeHandler
[前面已经转了几篇有关静态/动态代理的帖子.写的都很不错.自己也跟着视频敲了几篇代码.
现在贴出来.算是有有始有终吧.]
1.UserManager接口
1
package com.zyl.proxy;
2![]()
3
public interface UserManager {
4
5
public void addUer(String name,String password);
6
7
public void delUser(String id);
8
9
public void modifyUser(int id, String name, String password);
10
11
}
12![]()
2.实现接口的UserManagerImpl类
package com.zyl.proxy;2

3
public interface UserManager {4
5
public void addUer(String name,String password);6
7
public void delUser(String id);8
9
public void modifyUser(int id, String name, String password);10
11
}12

1
package com.zyl.proxy;
2![]()
3
public class UserManagerImpl implements UserManager {
4![]()
5![]()
6
public void addUer(String name, String password) {
7
//
添加日志/安全性检查
8
//checksafe();
9
//采用添加代理类的方法会如何?
10
System.out.println("UserManagerImpl.addUser()123");
11![]()
12
}
13![]()
14
@Override
15
public void delUser(String id) {
16
//
添加日志/安全性检查
17
//checksafe();
18
System.out.println("UserManagerImpl.delUser()");
19
}
20![]()
21
@Override
22
public void modifyUser(int id, String name, String password) {
23
//
添加日志/安全性检查
24
//checksafe();
25
System.out.println("UserManagerImpl.modifyUser()");
26![]()
27
}
28
// private void checksafe(){
29
// System.out.println("检查安全性的方法");
30
// }
31
}
32![]()
注释的地方不用理会
package com.zyl.proxy;2

3
public class UserManagerImpl implements UserManager {4

5

6
public void addUer(String name, String password) {7
//
添加日志/安全性检查8
//checksafe();9
//采用添加代理类的方法会如何?10
System.out.println("UserManagerImpl.addUser()123");11

12
}13

14
@Override15
public void delUser(String id) {16
//
添加日志/安全性检查17
//checksafe();18
System.out.println("UserManagerImpl.delUser()");19
}20

21
@Override22
public void modifyUser(int id, String name, String password) {23
//
添加日志/安全性检查24
//checksafe();25
System.out.println("UserManagerImpl.modifyUser()");26

27
}28
// private void checksafe(){29
// System.out.println("检查安全性的方法");30
// }31
}32

3.动态代理的类safeHandler
1
package com.zyl.proxy;
2![]()
3
import java.lang.reflect.InvocationHandler;
4
import java.lang.reflect.Method;
5
import java.lang.reflect.Proxy;
6![]()
7
public class safeHandler implements InvocationHandler { //实现InvocationHandler接口
8
9
private Object targetObj;
10
public Object newProxy(Object targetObj){
11
this.targetObj=targetObj;
12
//生成动态代理::
13
//对象的接口等ooxx
14
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),targetObj.getClass().getInterfaces(),
15
this);//targetObj.getClass().getInterfaces()的传入,所以只要实现了接口的类都会被动态代理
16
17
}
18
public Object invoke(Object proxy, Method method, Object[] args)//args是传递过来的参数,比如name为张三
19
throws Throwable {
20
//调用任何方法前都会前调用invoke方法,所以我们在invoke方法前放置需要调用的代码 如安全性检查/log日志等等添加的方法
21
//这里还可以加入一些逻辑判断,是否加入安全性检查
22
checksafe();
23
System.out.println("方法名是"+method.getName());
24
for(int i=0;i<args.length;i++){
25
System.out.println("哈哈"+args[i]);
26
}
27
//临时添加方法调用结束
28
//以下调用一般的方法
29
Object result=null;
30
31
try{
32
method.invoke(targetObj,args); //真正的调用对象的实现的方法(非添加的那些方法)
33
}catch(Exception e){
34
e.printStackTrace();
35
}
36
return result; //invoke方法需要返回一个对象.所以前面定义了一个Object result=null; 这里返回result
37
}
38
//将要加入的安全性检查等等类似的方法放在此类中
39
private void checksafe(){
40
System.out.println("检查安全性的方法");
41
}
42![]()
43
}
44![]()
4.client端:
package com.zyl.proxy;2

3
import java.lang.reflect.InvocationHandler;4
import java.lang.reflect.Method;5
import java.lang.reflect.Proxy;6

7
public class safeHandler implements InvocationHandler { //实现InvocationHandler接口8
9
private Object targetObj;10
public Object newProxy(Object targetObj){11
this.targetObj=targetObj;12
//生成动态代理::13
//对象的接口等ooxx14
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(),targetObj.getClass().getInterfaces(),15
this);//targetObj.getClass().getInterfaces()的传入,所以只要实现了接口的类都会被动态代理16
17
}18
public Object invoke(Object proxy, Method method, Object[] args)//args是传递过来的参数,比如name为张三19
throws Throwable { 20
//调用任何方法前都会前调用invoke方法,所以我们在invoke方法前放置需要调用的代码 如安全性检查/log日志等等添加的方法21
//这里还可以加入一些逻辑判断,是否加入安全性检查22
checksafe();23
System.out.println("方法名是"+method.getName());24
for(int i=0;i<args.length;i++){25
System.out.println("哈哈"+args[i]);26
}27
//临时添加方法调用结束28
//以下调用一般的方法29
Object result=null;30
31
try{32
method.invoke(targetObj,args); //真正的调用对象的实现的方法(非添加的那些方法)33
}catch(Exception e){34
e.printStackTrace();35
}36
return result; //invoke方法需要返回一个对象.所以前面定义了一个Object result=null; 这里返回result37
}38
//将要加入的安全性检查等等类似的方法放在此类中39
private void checksafe(){40
System.out.println("检查安全性的方法");41
}42

43
}44

1
package com.zyl.ooxx;
2![]()
3
import com.zyl.proxy.UserManager;
4
import com.zyl.proxy.UserManagerImpl;
5
import com.zyl.proxy.safeHandler;
6![]()
7![]()
8
public class client {
9![]()
10
public static void main(String[] args) {
11
safeHandler handler=new safeHandler();//建立代理类的实例
12
UserManager usermanager=(UserManager)handler.newProxy(new UserManagerImpl());//传入代理对象
转成原接口类型
13
usermanager.addUer("实际是调用代理的方法", "2222");//调用代理中的东西,然后再调用代理对象的ooxx
14
15
}
16![]()
17
}
18![]()
就到这里吧.学习spring aop的基础差不多打好了
package com.zyl.ooxx;2

3
import com.zyl.proxy.UserManager;4
import com.zyl.proxy.UserManagerImpl;5
import com.zyl.proxy.safeHandler;6

7

8
public class client {9

10
public static void main(String[] args) {11
safeHandler handler=new safeHandler();//建立代理类的实例12
UserManager usermanager=(UserManager)handler.newProxy(new UserManagerImpl());//传入代理对象
转成原接口类型13
usermanager.addUer("实际是调用代理的方法", "2222");//调用代理中的东西,然后再调用代理对象的ooxx14
15
}16

17
}18


浙公网安备 33010602011771号