java静态代理,动态代理(java学习笔记)(一)java动态代理
静态代理
package com.gds.demo.test;public interface Animal {
public void action();
public void breach();
}package com.gds.demo.test;
public class Cat implements Animal{
@Override
public void action() {
System.out.println("喵喵喵。。。。。");
}
@Override
public void breach() {
System.out.println("喵式呼吸大法。。。。");
}
}package com.gds.demo.test;
public class CatProxy implements Animal{
Cat cat;
public CatProxy(Cat cat){
this.cat = cat;
}
@Override
public void action() {
System.out.println("===========catproxy代理执行开始");
cat.action();
System.out.println("===========catproxy代理执行结束");
}
@Override
public void breach() {
System.out.println("===========catproxy代理执行开始");
cat.breach();
System.out.println("===========catproxy代理执行结束");
}
}package com.gds.demo.test;
public class Dog implements Animal{
@Override
public void action() {
System.out.println("汪汪汪-------------");
}
@Override
public void breach() {
System.out.println("狗刨式----------");
}
}package com.gds.demo.test;
public class DogProxy implements Animal{
Dog dog;
public DogProxy(Dog dog){
this.dog = dog;
}
@Override
public void action() {
System.out.println("Dogproxy 代理执行开始----------");
dog.action();
System.out.println("Dogproxy 代理执行结束----------");
}
@Override
public void breach() {
System.out.println("Dogproxy 代理执行开始----------");
dog.breach();
System.out.println("Dogproxy 代理执行结束----------");
}
}package com.gds.demo.test;
public class TestStaticProxy {
public static void main(String[] args) {
Cat cat = new Cat();
CatProxy catProxy = new CatProxy(cat);
catProxy.action();
catProxy.breach();
Dog dog = new Dog();
DogProxy dogProxy = new DogProxy(dog);
dogProxy.action();
dogProxy.breach();
}
}
动态代理
package com.gds.demo.test1;/**
* 杏仁面包代理
*/
public class ApricotBreadProxy implements BreadMachine{
private BreadMachine breadMachine;
public ApricotBreadProxy(BreadMachine breadMachine){
this.breadMachine = breadMachine;
}
@Override
public void makeBread() {
breadMachine.makeBread();
System.out.println("adding aprioct......");
}
}package com.gds.demo.test1;
import javax.sound.midi.Soundbank;
/**
* 杏仁蛋糕代理
*/
public class ApricotCakeProxy implements CakeMachine{
private CakeMachine cakeMachine;
public ApricotCakeProxy(CakeMachine cakeMachine){
this.cakeMachine = cakeMachine;
}
@Override
public void makeCake() {
cakeMachine.makeCake();
System.out.println("adding aprioct.....");
}
}package com.gds.demo.test1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 杏仁动态代理
*/
public class ApricotHandler implements InvocationHandler {
private Object object;
public ApricotHandler(Object object){
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = method.invoke(object, args);
System.out.println("adding apricot.....");
return invoke;
}
}package com.gds.demo.test1;
/**
* 面包机器接口
*/
public interface BreadMachine {
void makeBread();
}package com.gds.demo.test1;
/**
* 蛋糕机器接口
*/
public interface CakeMachine {
void makeCake();
}package com.gds.demo.test1;
import java.lang.reflect.Proxy;
/**
* 蛋糕店
*/
public class CakeShop {
public static void main(String[] args) {
new FruitCakeMachine().makeCake();
new ChocolateCakeMachine().makeCake();
new RedBeanBreadMachine().makeBread();
new CurrantBreadMachine().makeBread();
FruitCakeMachine fruitCakeMachine = new FruitCakeMachine();
ApricotCakeProxy apricotCakeProxy = new ApricotCakeProxy(fruitCakeMachine);
apricotCakeProxy.makeCake();
apricotCakeProxy = new ApricotCakeProxy(new ChocolateCakeMachine());
apricotCakeProxy.makeCake();
RedBeanBreadMachine redBeanBreadMachine = new RedBeanBreadMachine();
ApricotBreadProxy apricotBreadProxy = new ApricotBreadProxy(redBeanBreadMachine);
apricotBreadProxy.makeBread();
CurrantBreadMachine currantBreadMachine = new CurrantBreadMachine();
apricotBreadProxy = new ApricotBreadProxy(currantBreadMachine);
apricotBreadProxy.makeBread();
// 动态代理 给蛋糕加杏仁
ApricotHandler apricotHandler = new ApricotHandler(fruitCakeMachine);
CakeMachine cakeMachine= (CakeMachine) Proxy.newProxyInstance(fruitCakeMachine.getClass().getClassLoader(),
fruitCakeMachine.getClass().getInterfaces(),apricotHandler);
cakeMachine.makeCake();
// 给面包加杏仁
apricotHandler = new ApricotHandler(redBeanBreadMachine);
BreadMachine breadMachine = (BreadMachine) Proxy.newProxyInstance(redBeanBreadMachine.getClass().getClassLoader(),
redBeanBreadMachine.getClass().getInterfaces(), apricotHandler);
breadMachine.makeBread();
}
}package com.gds.demo.test1;
/**
* 巧克力蛋糕机器
*/
public class ChocolateCakeMachine implements CakeMachine{
@Override
public void makeCake() {
System.out.println("making a ChocolateCake cake...........");
}
}package com.gds.demo.test1;
/**
* 葡萄干面包机器
*/
public class CurrantBreadMachine implements BreadMachine{
@Override
public void makeBread() {
System.out.println("making currant bread.........");
}
}package com.gds.demo.test1;
/**
* 水果蛋糕机器
*/
public class FruitCakeMachine implements CakeMachine{
@Override
public void makeCake() {
System.out.println("Making a fruit cake.....");
System.out.println("adding aprioct...........");
}
}package com.gds.demo.test1;
/**
* 红豆面包机器
*/
public class RedBeanBreadMachine implements BreadMachine{
@Override
public void makeBread() {
System.out.println("making red bean bread...........");
}
}
#yyds干货盘点# 设计模式之静态代理,jdk动态代理,cglib动态代理的区别jdk静态代理和动态代理
静态代理,JDK动态代理,Cglib动态代理详解jdk动态代理
静态代理、动态代理,以及动态代理的调用说明静态代理和动态代理
代理模式之静态代理,JDK动态代理和cglib动态代理jdk cglib动态代理
Java学习路线-57:静态代理和动态代理java静态代理和动态代理
Java动态代理的两种实现方法:JDK动态代理和CGLIB动态代理jdk静态代理和动态代理
SpringAOP用到了什么代理,以及动态代理与静态代理的区别springaop静态代理和动态代理