91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

spring代理對象怎么創建

小億
128
2023-11-20 23:24:47
欄目: 編程語言

在Spring中,可以使用兩種方式來創建代理對象:

  1. 使用JDK動態代理:JDK動態代理是通過接口來實現的代理方式。首先,需要定義一個接口,然后創建一個實現該接口的實現類,并且實現具體的業務邏輯。接下來,創建一個InvocationHandler接口的實現類,該類中實現了invoke方法,用于在代理對象的方法被調用時進行處理。最后,使用Proxy類的靜態方法newProxyInstance來創建代理對象。
public interface UserService {
    void addUser(String name);
}

public class UserServiceImpl implements UserService {
    @Override
    public void addUser(String name) {
        System.out.println("Add user: " + name);
    }
}

public class UserServiceInvocationHandler implements InvocationHandler {
    private Object target;

    public UserServiceInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before method: " + method.getName());
        Object result = method.invoke(target, args);
        System.out.println("After method: " + method.getName());
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        UserServiceInvocationHandler handler = new UserServiceInvocationHandler(userService);
        UserService proxy = (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),
                userService.getClass().getInterfaces(), handler);
        proxy.addUser("John");
    }
}
  1. 使用CGLIB動態代理:CGLIB動態代理是通過繼承來實現的代理方式。首先,需要定義一個類,然后創建一個繼承該類的子類,并且重寫父類的方法,實現具體的業務邏輯。接下來,創建一個MethodInterceptor接口的實現類,該類中實現了intercept方法,用于在代理對象的方法被調用時進行處理。最后,使用Enhancer類的create方法來創建代理對象。
public class UserService {
    public void addUser(String name) {
        System.out.println("Add user: " + name);
    }
}

public class UserServiceInterceptor implements MethodInterceptor {
    @Override
    public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
        System.out.println("Before method: " + method.getName());
        Object result = proxy.invokeSuper(obj, args);
        System.out.println("After method: " + method.getName());
        return result;
    }
}

public class Main {
    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(UserService.class);
        enhancer.setCallback(new UserServiceInterceptor());
        UserService proxy = (UserService) enhancer.create();
        proxy.addUser("John");
    }
}

無論使用JDK動態代理還是CGLIB動態代理,都需要創建一個InvocationHandler或MethodInterceptor的實現類,并在其中實現具體的代理邏輯。然后,通過相應的方式創建代理對象,并將代理對象用于執行相應的方法。

0
长武县| 丁青县| 天台县| 阆中市| 平昌县| 汉源县| 武威市| 喀什市| 敦煌市| 南汇区| 扶余县| 乌拉特前旗| 滦南县| 芦山县| 哈巴河县| 化州市| 满洲里市| 乌苏市| 乌拉特前旗| 惠东县| 临潭县| 乌兰浩特市| 浦北县| 文山县| 大城县| 德惠市| 库伦旗| 辽阳县| 大埔区| 泾川县| 云霄县| 灵璧县| 公主岭市| 高尔夫| 淮南市| 屯门区| 晋宁县| 隆安县| 永定县| 甘洛县| 安国市|