我在spring中注册了一个userDAO
<bean id="userDAO" class="com.abc.dao.impl.UserDAOImpl">
并给这个类的方法添加了aop的事务(如果不加事务,那么下面打印的是UserDAOImpl)
在程序中
UserDAO userDAO = (UserDAO) userDAO.getBean("userDAO");
System.out.println(userDAO.getClass());
结果打印的是 $Proxy1,但是我想得到的是UserDAOImpl这个类,因为这个类上我给加了annotation,我想读其中的值
高手帮帮忙?
<bean id="userDAO" class="com.abc.dao.impl.UserDAOImpl">
并给这个类的方法添加了aop的事务(如果不加事务,那么下面打印的是UserDAOImpl)
在程序中
UserDAO userDAO = (UserDAO) userDAO.getBean("userDAO");
System.out.println(userDAO.getClass());
结果打印的是 $Proxy1,但是我想得到的是UserDAOImpl这个类,因为这个类上我给加了annotation,我想读其中的值
高手帮帮忙?
解决方案 »
- junit问题,大家来帮忙
- Java编程题:字符串sbc,fds,des按字母的升序输出
- java.lang.UnsatisfiedLinkError: /usr/local/j2sdk1.4.2_05/jre/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No
- 求助:一个简单的java错误,是怎么回事啊!!
- 怎么根据一个字符串(类名)去运行这个类的一个静态方法
- 读字符的问题
- jbuilder8 为什么不能存文件?
- 实例变量和类变量
- 在哪里能找到java类的帮助文挡?给50分行吗?
- 请问什么是嵌入式数据库?(空)
- 循环里continue,是否后面语句不执行
- 关于一个类调用另外一个类的方法的问题.
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface Auth {
String name();
enum TYPE{MENU,OPER,DATA} ;
TYPE type() default TYPE.OPER;
String fields() default "";
int order() default 0;
}
我是这么定义的,
@Auth(name = "权限相关的操作")
public class UserDAOImpl implements UserDAO测试
可是还是没得到
但是AOP的事务处理spring已经实现了,是否可以复写它的类?
Class clazz = null;
Object proxy = SpringUtils.getBean(bean);
if (AopUtils.isJdkDynamicProxy(proxy)) {
InvocationHandler invo = Proxy.getInvocationHandler(proxy);
AdvisedSupport advised = (AdvisedSupport) new DirectFieldAccessor(
proxy).getPropertyValue("advised");
clazz = advised.getTargetClass();
} else
clazz = AopUtils.getTargetClass(proxy);
public interface IsayHello {
public void sayHello();
}package proxy.entity;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class InterfaceHandlder implements InvocationHandler {
public Object targer;
/**
* Method InterfaceHandlder
*
*
*/
public InterfaceHandlder() {
// TODO: Add your code here
}
public InterfaceHandlder(Object t){
this.targer=t;
} /**
* Method invoke
*
*
* @param proxy
* @param method
* @param args
*
@throws Throwable
*
* @return
*
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO: Add your code here
System.out.println("代理对象的方法开始执行......");
Object ob=method.invoke(this.targer,args);
System.out.println("代理对象的方法执行结束");
return ob;
}
}
package proxy.test;import proxy.entity.*;
import java.lang.reflect.*;
import proxy.dao.*;
public class ProxyTest {
/**
* Method ProxyTest
*
*
*/
public ProxyTest() {
// TODO: Add your code here
} /**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) {
// TODO: Add your code here
IsayHello ih=new Targer();
InterfaceHandlder ihHandler=new InterfaceHandlder(ih);
Class [] interfaces=ih.getClass().getInterfaces();
Object proxy=Proxy.newProxyInstance(Object.Class.getClassloader(),interfaces,ihHandler);
IsayHello ihProxy=null;
ihProxy=(IsayHello)proxy;
ihProxy.sayHello();
}
}