您的位置:首页 > 其它

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

2017-12-13 20:12 423 查看

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

1. 类加载器:

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

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

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

ClassLoader可以获得classes(src)下的所有资源。

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

//classLoader.getResourceAsStream()获得流;

ClassLoader和Properties配合使用加载配置文件。

2. 注解:@xxx

给程序员看,给jvm看。

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

两者的优缺点:

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

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

Jdk5提供的注解:

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

@Deprecated :标注过时。

@SuppressWarnings:压制警告 如list泛型

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

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

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

3. 动态代理proxy

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

proxy:代表动态代理对象

method:代表正在执行的方法

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

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

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

4000
public class Proxys {
@Test
public void dail() {
Proxys proxys = new Proxys();
//newPro是代理对象,根据参数确定是谁的代理对象
//在运行中,动态的为JBdemo创建一个虚拟的代理对象
//与目标对象相同的类加载器
//
AAA newPro = (AAA) Proxy.newProxyInstance(JBdemo.class.getClassLoader(), JBdemo.class.getInterfaces(), new InvocationHandler() {

@Override
public 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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐