JAVA关于代理的理解

代理的例子:我原本要开车去很远的地方买电脑,但是现在我让其他人帮我买了。我就是目标对象,而帮我买电脑的人就是代理对象。他增强了我的功能,然我很简单就买到了电脑。

代理分为静态代理和动态代理两类。
静态代理:分为继承代理和聚合代理两类。主要是用聚合代理。

聚合代理:实例。login方法的增强

UserDao是一个接口
public interface UserDao {
public void login(String s);
}

目标对象类

public class UserDaoImp implements UserDao{
public void login(String name){
System.out.println(""+name+“登录成功”);
}

}

代理对象类

public class LogUserProxy implements UserDao {
UserDaoImp userDaoImp;

public LogUserProxy(UserDaoImp xxx){
    xxx=new UserDaoImp();
}
@Override
public void login(String s) {

    userDaoImp=new UserDaoImp();
    userDaoImp.login(s);
    
    System.out.println("代理成功"); //增强新加的方法
}

目标对象类和代理对象类都实现了UserDao接口
通过代理模式,在实际调用时,只需要new一个代理对象类的对象,同时将目标对象类传入代理对象类的构造方法,随后再调用代理对象类的重写方法,即可完成由目标对象到代理对象的转换。

动态代理
动态代理实际上就是静态代理中聚合的衍生。由上述例子可以知道。要想代理一个目标对象,则必须新建一个代理对象类,假如以后有很多的对象需要代理,就会非常的麻烦。动态代理应运而生。

动态代理的核心思想就是先构建一个JAVA文件,这个JAVA文件当中存放了代理对象类的所有信息,用户只需要把增强的代码写入即可。
JAVA文件经过编译,形成class字节码文件,随后由classLoader类加载器加载进内存。最后,通过反射机制即可返回一个目标对象类的实例。

这样一来,项目当中就不会存在很多代理类,代理类统一有虚拟机进行管理维护。

1.需要完成的任务 使用UserDaoImp1类和User类的相关方法,完成如下功能: (1)对空的User类对象调用getUserInfo()方法抛出的异常处理 (2)修改UserDaoImp1类,要求用户id不能修改,修改则抛出异常 (3)使用log4j输出日志信息 2.技能训练 (1)会使用try-catch-finally捕获和处理异常 (2)会使用throw和throws (3)会使用log4j记录日志 3.实践 实践一:使用try-catch进行异常处理 需求说明 (1)使用UserDaoImp1类的方法查找用户,并用User类的getUserInfo()方法输出用户信息 (2)使用一个不存在的用户名查找用户,使用try-catch对抛出的异常进行处理 实现思路及关键代码 (1)在测试类中调用UserDaoImp类的addUser(User user)方法,添加用户,然后用findUser(String uName)方法查找并输出用户信息 (2)在测试类中调用UserDaoImp1类的findUser(String uName)方法,使用不存在的用户名查找用户,并试图输出用户信息 (3)对抛出的异常使用try-catch进行异常处理。 实践二:使用try-catch-finally进行异常处理 需求说明 (1)对实践1的异常使用try-catch-finally进行异常处理 (2)在finally块输出是否抛出了异常 实现思路及关键代码 (1)在任务一中的代码上增加finally块 (2)为了判断在finally块输出是否抛出异常,可以设置一个变量,在catch块里修改这个变量 实践四:使用log4j 需求说明 (1)使用log4j输出日志信息 (2)查看输出日志信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值