Spring核心原理AOP
来源:互联网 发布:mac air使用教程视频 编辑:程序博客网 时间:2024/05/17 14:18
框架核心知识-反射,动态代理
1、动态语言,具备反射机制
a、运行时,判断任意一个对象所属类
b、构造任意一个类的对象实例
c、判断任意类所具备的成员变量和方法
d、调用任意类所具备的成员变量和方法
e、生成动态代理
2、java反射中,最核心的api:
java.lang.Class 代表一个类
java.lang.reflect.Method 代表类的方法
java.lang.reflect.Filed 代表类的成员变量
java.lang.reflect.Constructor 代表类的构造方法
3、Class类
正常:import导入-》通过new实例化-》取得实例化对象
反射:实例化对象-》getClass方法-》类的名称
类它既能够拿到属性方法和构造器
例子:
public class Person{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class aop { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { Object obj=new Person(); Class clazz=obj.getClass(); System.out.println(clazz.getName()+"----"+clazz.getSimpleName()); try { Method mSet = clazz.getMethod("setName",String.class); try { mSet.invoke(obj,"12345"); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } Method mGet = clazz.getMethod("getName"); System.out.println(mGet.invoke(obj)); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } }}
Class的实例获取方式
1、类名.class
2、对象实例.getClass();
3、Class.forName()
4、classLoader.loadClass(“”)
类的加载过程
AOP Spring jdk (反射结合proxy)
动态代理,是指客户通过代理类调用其他对象的方法,并且在程序运行时根据需要动态的创建目标类的代理对象。
package aop;public interface Person { public void sayHello();}
package aop;public class Student implements Person{ private String name="jkxqj"; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void sayHello() { System.out.println("大家好,我是"+name); }}
package aop;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class ProxyHandler implements InvocationHandler{ private Object obj; public ProxyHandler(Object obj){ this.obj=obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("调用前。。。"); Object result = method.invoke(this.obj, args); System.out.println("调用后。。。"); return result; }}
package aop;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;public class aop { public static void main(String[] args) { Person person=new Student(); InvocationHandler handler=new ProxyHandler(person); Person p =(Person)Proxy.newProxyInstance(person.getClass().getClassLoader(),person.getClass().getInterfaces(), handler); p.sayHello(); }}
阅读全文
0 0
- Spring核心原理AOP
- Spring框架的AOP/IOC/容器核心原理实例详解
- 关于Spring核心原理Aop的几种实现方式
- 动态代理设计模式[Spring AOP原理(核心模式)]
- Spring核心 AOP
- Spring核心之AOP
- spring核心:IOC和AOP
- Spring 核心DI, AOP简介
- Spring 核心之 AOP设计
- spring aop 原理(转)
- spring aop 原理
- spring AOP原理
- spring的aop原理
- spring aop原理(转)
- spring AOP实现原理
- Spring的AOP原理
- spring AOP原理
- spring AOP原理
- scala闭包
- os, os.path模块中关于文件/目录常用的函数使用方法
- centos7.2 postgresql 9.2 用户名登录 ‘psql: 致命错误: 用户 "postgres" Ident 认证失败’
- 两点间最短路径—Dijkstra算法和Floyd算法
- MySQL统计信息
- Spring核心原理AOP
- windows部署项目到服务器,文件名中文乱码
- Java 类的生命周期
- mybatis入门实战之CRUD
- python爬取糗事百科
- #支持向量机(SVM)与其理论发展(1)
- MySQL 5.7 EXPLAIN EXTENDED语句说明
- 次小生成树
- debug有感