xiaosunnihaomang 2011-09-18 10:30
浏览 304
已采纳

Spring的ProxyFactory的方法——addInterceptor()

UserDao类:
package com.sunyan.dao;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class UserDao {
private Map map = new HashMap();
public UserDao(){
map.put("admin", "security");
map.put("test", "123");
}
public void create(String username, String password){
if(map.get(username)!=null)
throw new RuntimeException("User exist");
map.put(username, password);
}
public void login(String username,String password){
String pw = map.get(username);
if(pw==null||!pw.equals(password))
throw new RuntimeException("Login failed");
}
public void print(){
System.out.println("User list:");
Set keySet = (Set) map.keySet();
for(String key : keySet)
System.out.println(key);
}
}

UserService接口:
package com.sunyan.service;

public interface UserService {
void create(String username,String password);
void login(String username,String password);
}
UserServiceImpl类:
package com.sunyan.service.impl;

import com.sunyan.dao.UserDao;
import com.sunyan.service.UserService;

public class UserServiceImpl implements UserService{
private UserDao userDao;

public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

@Override
public void create(String username, String password) {
    userDao.create(username, password);
}

@Override
public void login(String username, String password) {
    userDao.login(username, password);
}

}
AopProxyFactory类:
package com.sunyan.proxy;

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

import org.springframework.aop.MethodBeforeAdvice;

public class AopProxyFactory {
public static Object createProxy(final Object target,final MethodBeforeAdvice methodBeforeAdvice) {
return Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
//首先调用切面的before方法
methodBeforeAdvice.before(method, args, target);
//然后调用实际对象的方法
return method.invoke(target, args);
}
});
}
}
测试类:
package com.sunyan.test;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
import org.springframework.aop.framework.ProxyFactory;
import com.sunyan.dao.UserDao;
import com.sunyan.proxy.AopProxyFactory;
import com.sunyan.service.UserService;
import com.sunyan.service.impl.UserServiceImpl;

public class DynamicProxyTest {

public static void main(String[] args) {
    UserDao userDao = new UserDao();
    UserServiceImpl target = new UserServiceImpl();
    target.setUserDao(userDao);

    //创建日志记录切面
    MethodBeforeAdvice log = new MethodBeforeAdvice(){
        @Override
        public void before(Method m, Object[] args, Object target)
                throws Throwable {
            System.out.println("call method: "+ m.getName());
        }
    };

    /*//创建代理类
    UserService userService = (UserService) AopProxyFactory.createProxy(target, log);

    //调用代理类的方法
    userService.create("aop", "password");
    userService.login("aop", "password");

    userDao.print();*/

    //我想使用的是Spring的ProxyFactory类,可是addInterceptor方法报错,说没有此方法。
    ProxyFactory factory = new ProxyFactory(target);
    factory.addInterceptor(log);
    UserService userService = (UserService) factory.getProxy();
    userService.create("aop", "password");
    userService.login("aop", "password");

    userDao.print();
}

}
在测试类中的:factory.addInterceptor(log);出错,报说没有此方法,为什么?

  • 写回答

1条回答 默认 最新

  • _1_1_7_ 2011-09-18 11:16
    关注

    void addInterceptor(Interceptor interceptor) throws AopConfigException;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制