proxy

作者: 1baibai | 来源:发表于2021-12-21 09:41 被阅读0次

1、静态代理

  • 创建代理类

必要条件:
1、代理、目标对象实现同样接口;
2、代理类继承目标类

public class PersonProxy implements PersonService {

    //目标对象
    private PersonService target;
    // set 
    public void setTarget(PersonService target) {
        this.target = target;
    }

    @Override
    public Boolean login(String name, String password) {
        System.out.println("-------------日志--------------");
        Boolean result = target.login(name, password);
        System.out.println("-------------日志--------------");
        return result;
    }
}
  • 配置Bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <bean name="personService" class="com.baibai.proxy.PersonProxy">
        <property name="target">
            <bean class="com.baibai.impl.PersonServiceImpl"/>
        </property>
    </bean>
</beans>

  • 业务层
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
PersonService service = context.getBean("personService", PersonService.class);
service.login("bill","123456");

2、动态代理

程序运行过程中动态生成代理类的字节码(动态字节码技术)

  • JDK自带(代理类和目标类事项同一接口)
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
PersonService target = context.getBean("personService", PersonService.class);

ClassLoader loader = getClass().getClassLoader();
PersonService cproxy = (PersonService)Proxy.newProxyInstance(loader, target.getClass().getInterfaces(), (Object proxy, Method method, Object[] args) -> {
    System.out.println("------------日志输出---------------");
    //调用目标对象的目标方法
    Object result = method.invoke(target, args);
    System.out.println("------------日志输出---------------");
    return result;
});

cproxy.login("alibaba", "123456");
context.close();
  • CGlib(代理类继承目标类)

相关文章

网友评论

      本文标题:proxy

      本文链接:https://www.haomeiwen.com/subject/kbbzfrtx.html