目录
Spring AOP面向切面编程(spring动态代理注解版)
静态代理
列:实现静态代理
代理接口User.java
public interface User {
/*
* 业务接口
* */
public void work(String workName);
public void doing(); //增加接口
}
目标对象 实际业务逻辑实现方法UserImpl.java
public class UserImpl implements User{
@Override
public void work(String workName) {
// TODO Auto-generated method stub
System.out.println("老王 "+ ".");
}
@Override
public void doing() {
// TODO Auto-generated method stub
}
}
代理类UserProxy.java
实现业务逻辑接口,接收一个实际业务处理对象
public class UserProxy implements User{
private User user;
public UserProxy(User user) {
super();
this.user = user;
}
@Override
public void work(String workName) {
// TODO Auto-generated method stub
check();
user.work(workName);
printLog();
}
@Override
public void doing() {
}
private void printLog() {
// TODO Auto-generated method stub
System.out.println("权限验证");
}
private void check() {
// TODO Auto-generated method stub
System.out.println("打印日志");
}
}
测试
@org.junit.Test
public void test1() {
User userProxy = new UserProxy(new UserImpl());
userProxy.work("在吃饭");
}
动态代理
列: 实现动态代理
创建po对象
创建dao
创建user接口与 接口实现类
创建角色接口与 接口实现类
创建代理类 MyProxy.java
//3创建代理对象
public class MyProxy implements InvocationHandler{
private Object object;//3.1生命委托对象
//3.2 有参数的构造方法
public MyProxy(Object object) {
super();
this.object = object;
}
//3.3得到代理对象
public Object getProxyObjectInstance() {
//Proxy.newProxyInstance(类加载器,接口,代理对象的实例)
return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), this);
}
//3.4生成代理对象
/**
* 在代理实例上处理方法调用并返回结果
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO Auto-generated method stub
check();
Object retObject=method.invoke(object, args);
printLog();
return retObject;
}
public void check(){
System.out.println("用户权限验证");
}
public void printLog(){
System.out.println("打印日志");
}
}
测试
/**
* 测试user代理对象
*/
@org.junit.Test
public void testUserProxyObject() {
MyProxy myProxy=new MyProxy(new UserDaoImpl());//委托
UserDao userDao=(UserDao)myProxy.getProxyObjectInstance();//获取代理对象
userDao.addUser(new User());
System.out.println();
String id=userDao.getId();
System.ou