动态代理

集合注入

编写Student实体

public class Student{
    private Integer stu_id;
    private String stu_name;
    private List<String> lists;

    public Integer getStu_id() {
        return stu_id;
    }

    public void setStu_id(Integer stu_id) {
        this.stu_id = stu_id;
    }

    public String getStu_name() {
        return stu_name;
    }

    public void setStu_name(String stu_name) {
        this.stu_name = stu_name;
    }
    public List<String> getLists() {
        return lists;
    }

    public void setLists(List<String> lists) {
        this.lists = lists;
    }
}

编写applicationContext.xml文件

 <bean id="student" class="spring.di.Student">
        <property name="lists">
            <list>
                <value>zeng</value>
                <value>zhen</value>
                <value>chao</value>
            </list>
        </property>
    </bean>

运行结果
在这里插入图片描述
在这里插入图片描述

静态代理

编写Subject真实业务接口

/*抽象主题 真实业务接口*/
public interface Subject {
    public void doSome();
}

编写RealSubject 真实主题,实现Subject

/*真实主题:将业务代码封装到此主题当中*/
public class RealSubject implements Subject{
    @Override
    public void doSome() {
        System.out.println("真实业务-------");
    }
}

编写ProcySubject 代理主题继承Subject

public class ProcySubject implements Subject {
    /*代理主题:代理类 生成真实主题对象,调用真实主题的方法
    程序就不用直接去创建真实主题了,直接调用代理对象
    静态代理:说白了,就是创建一 个给程序调用的类(代理类),然后用代理类去吊原始对象
*/
    private Subject subject=new RealSubject();
    @Override
    public void doSome() {
        System.out.println("前置");
        subject.doSome();
        System.out.println("后置");
    }
}
编写test测试类
```java
//JDK动态代理:要求必须有抽象主题
//代表的是代理对象指定对 象的原始类型
public class Test {
    public static void main(String[] args) {
        ProcySubject procySubject=new ProcySubject();
        procySubject.doSome();
  }
} 

结果
在这里插入图片描述
代理主题:代理类 生成真实主题对象,调用真实主题的方法
程序就不用直接去创建真实主题了,直接调用代理对象
静态代理:说白了,就是创建一 个给程序调用的类(代理类),然后用代理类去吊原始对象

动态代理

//JDK动态代理:要求必须有抽象主题
//代表的是代理对象指定对 象的原始类型
public class Test {
    public static void main(String[] args) {
        //创建一个原始类
        final Subject subject=new RealSubject();
         /*ClassLoader loader,类加载器: 应该是代理对象的类加载器
		Class<?>[] interfaces, 接口: 原始对象实现的接口类型
		InvocationHandler h*/
        Subject Subjects=(Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            /*@param proxy 代理对象
            @param method目标代理方法
            @param args目标代理方法的参数
            @return
            @throws Throwable*/
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("--前--");
                Object invoke = method.invoke(subject, args);
                System.out.println(invoke);
                System.out.println("--后--");
                return invoke;
            }
        });
        subject.doSome();
        System.out.println(subject);
        System.out.println(Subjects);
    }
}

运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值