笔记:Java反射以及动态代理
2014-05-28 08:46
330 查看
一.反射定义
反射功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法
4.在运行时调用任意一个对象的方法
5.生成动态代理
二.反射例子
Class<?> classAdminClientFactory
=
Class.forName("com.ibm.websphere.management.AdminClientFactory");
Class<?> classAdminClient
= Class.forName("com.ibm.websphere.management.AdminClient");
Method methodQueryMBeans
= classAdminClient.getMethod("queryMBeans", new
Class<?>[]{ObjectName.class,
QueryExp.class});
Method methodGetAttribute =
classAdminClient.getDeclaredMethod("getAttribute", new
Class<?>[]{ObjectName.class,
String.class});
Object adminClient =
methodCreateAdminClient.invoke(classAdminClientFactory, new
Object[]{props});
long freeMemory = Long.valueOf((String)
methodGetAttribute.invoke(adminClient, new
Object[]{objname, "freeMemory"})) ;
三、动态代理
例子,模拟事务处理:
class TransationInvocationHandler implements InvocationHandler {
Object obj;
public
TransationInvocationHandler(Object obj) {
this.obj = obj;
}
@Override
public Object
invoke(Object proxy, Method method,
Object[] args) throws Throwable {
boolean neeTransaction =
method.getName().startsWith("save")
||
method.getName().startsWith("update")
||
method.getName().startsWith("delete");
if (neeTransaction) {
System.out.println("----Transaction Begin---");
}
Object value = method.invoke(obj, args);
if (neeTransaction) {
System.out.println("----Transaction End---");
}
return value;
}
}
interface Dao {
Object save(Object
obj);
Object update(Object
obj);
Object get(int i);
List<Object> gets();
boolean delete(int
i);
}
class DaoImpl implements Dao {
@Override
public Object
save(Object obj) {
System.out.println("----save---");
return null;
}
@Override
public Object
update(Object obj) {
System.out.println("----update---");
return null;
}
@Override
public Object get(int i)
{
System.out.println("----get---");
return null;
}
@Override
public boolean
delete(int i) {
System.out.println("----delete---");
return true;
}
@Override
public
List<Object> gets() {
System.out.println("----gets---");
return null;
}
}
public class Client {
public static void
main(String[] args) {
Dao dao = new DaoImpl();
Dao daoProxy = (Dao)
Proxy.newProxyInstance(DaoImpl.class.getClassLoader(), new
Class<?>[]{Dao.class}, new
TransationInvocationHandler(dao));
System.out.println();
daoProxy.save(null);
System.out.println();
daoProxy.update(null);
System.out.println();
daoProxy.delete(0);
System.out.println();
daoProxy.get(0);
System.out.println();
daoProxy.gets();
}
}
输出:
----Transaction Begin---
----save---
----Transaction End---
----Transaction Begin---
----update---
----Transaction End---
----Transaction Begin---
----delete---
----Transaction End---
----get---
----gets---
写好的博文,发表以后只剩最前面一小节了,没心思重复写了,就弄成这个样子。。
反射功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法
4.在运行时调用任意一个对象的方法
5.生成动态代理
二.反射例子
Class<?> classAdminClientFactory
=
Class.forName("com.ibm.websphere.management.AdminClientFactory");
Class<?> classAdminClient
= Class.forName("com.ibm.websphere.management.AdminClient");
Method methodQueryMBeans
= classAdminClient.getMethod("queryMBeans", new
Class<?>[]{ObjectName.class,
QueryExp.class});
Method methodGetAttribute =
classAdminClient.getDeclaredMethod("getAttribute", new
Class<?>[]{ObjectName.class,
String.class});
Object adminClient =
methodCreateAdminClient.invoke(classAdminClientFactory, new
Object[]{props});
long freeMemory = Long.valueOf((String)
methodGetAttribute.invoke(adminClient, new
Object[]{objname, "freeMemory"})) ;
三、动态代理
例子,模拟事务处理:
class TransationInvocationHandler implements InvocationHandler {
Object obj;
public
TransationInvocationHandler(Object obj) {
this.obj = obj;
}
@Override
public Object
invoke(Object proxy, Method method,
Object[] args) throws Throwable {
boolean neeTransaction =
method.getName().startsWith("save")
||
method.getName().startsWith("update")
||
method.getName().startsWith("delete");
if (neeTransaction) {
System.out.println("----Transaction Begin---");
}
Object value = method.invoke(obj, args);
if (neeTransaction) {
System.out.println("----Transaction End---");
}
return value;
}
}
interface Dao {
Object save(Object
obj);
Object update(Object
obj);
Object get(int i);
List<Object> gets();
boolean delete(int
i);
}
class DaoImpl implements Dao {
@Override
public Object
save(Object obj) {
System.out.println("----save---");
return null;
}
@Override
public Object
update(Object obj) {
System.out.println("----update---");
return null;
}
@Override
public Object get(int i)
{
System.out.println("----get---");
return null;
}
@Override
public boolean
delete(int i) {
System.out.println("----delete---");
return true;
}
@Override
public
List<Object> gets() {
System.out.println("----gets---");
return null;
}
}
public class Client {
public static void
main(String[] args) {
Dao dao = new DaoImpl();
Dao daoProxy = (Dao)
Proxy.newProxyInstance(DaoImpl.class.getClassLoader(), new
Class<?>[]{Dao.class}, new
TransationInvocationHandler(dao));
System.out.println();
daoProxy.save(null);
System.out.println();
daoProxy.update(null);
System.out.println();
daoProxy.delete(0);
System.out.println();
daoProxy.get(0);
System.out.println();
daoProxy.gets();
}
}
输出:
----Transaction Begin---
----save---
----Transaction End---
----Transaction Begin---
----update---
----Transaction End---
----Transaction Begin---
----delete---
----Transaction End---
----get---
----gets---
写好的博文,发表以后只剩最前面一小节了,没心思重复写了,就弄成这个样子。。
相关文章推荐
- 【Java反射学习笔记系列之jdk动态代理】静态代理和动态代理的区别以及动态代理的作用和实现
- (54)Java学习笔记——反射 / 动态代理
- [Spring学习笔记 4 ] AOP 概念原理以及java动态代理
- 15. JAVA 反射机制 Part 2(动态代理、类的生命周期、工厂设计模式) ----- 学习笔记
- Java的反射机制与动态代理学习笔记
- java学习笔记---类型信息(type information)、反射机制与动态代理
- java反射之动态代理学习笔记
- Java学习笔记:反射与代理机制(静态、动态)
- Java动态代理以及InvocationHandler中invoke()方法笔记
- java学习笔记13--反射机制与动态代理
- [Spring学习笔记 4 ] AOP 概念原理以及java动态代理
- Java学习笔记之反射的应用-动态代理
- 反射和动态代理之Java学习总结
- Java反射的高级应用,模拟开发环境IDE动态搜索类成员以及方法,。。。。。
- Java深度历险——Java反射与动态代理
- Java反射之JDK动态代理实现简单AOP
- 模拟实现Struts拦截器-蕴含着代理模式,AOP,工厂模式,依赖注入,Java 反射,动态构造等机制
- 【转】JAVA核心层--反射--动态代理
- java反射--动态代理学习案例代码
- java动态代理学习笔记