17.12.13,web学习第二十五天,还有一年,努力吧青年动态代理

来源:互联网 发布:mongodb是什么数据库 编辑:程序博客网 时间:2024/05/22 19:48

类加载器,注解,动态代理

1. 类加载器:

BootStrap :引导类加载器。 JRE下面的rt.jar。运行时环境。

ExtClassLoader  扩展类加载器。加载基础的文件。

AppClassLoader AppclassLoader。三方jar包和自己写的java 件。

ClassLoader可以获得classessrc)下的所有资源。

String path=classLoader.getResource(“相对 classes(src)path”).getPath();

//classLoader.getResourceAsStream()获得流;

ClassLoaderProperties配合使用加载配置文件。

2. 注解:@xxx

给程序员看,给jvm看。

主流作用:代替xml配置文件。

两者的优缺点:

注解:开发效率高,耦合度高

配置文件:开发效率低,耦合度低

Jdk5提供的注解:

@override:告知编译器此方法是重写父类的。

@Deprecated :标注过时。

@SuppressWarnings:压制警告 如list泛型

不同的注解只能在不同的位置上使用。

自定义注解:(了解)会使用即可!!!

框架帮我们编写,解析注解,我们只会用即可!

3. 动态代理proxy

InvocationHandler接口中invoke方法的三个参数:

proxy:代表动态代理对象

method:代表正在执行的方法

args:代表调用目标方法时传入的实参

目标对象必须有接口 没有接口不能实现jdk版动态代理。

invocationHandlerinvoke()方法,代理类每一个方法执行时都会 调用一次invoke()方法。

public class Proxys {@Testpublic void dail() {Proxys proxys = new Proxys();//newPro是代理对象,根据参数确定是谁的代理对象//在运行中,动态的为JBdemo创建一个虚拟的代理对象//与目标对象相同的类加载器//AAA newPro = (AAA) Proxy.newProxyInstance(JBdemo.class.getClassLoader(), JBdemo.class.getInterfaces(), new InvocationHandler() { @Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {if (method.getName().equals("sleep")) {System.out.println("sleep");}return method.invoke(new JBdemo(), args);              //执行目标对象的方法}});  newProxyInstance.sleep();}}

阅读全文
0 0
原创粉丝点击