静态代理
2.动态代理
JDK 动态代理
CGLIB 动态代理 -- mybatis
3.代理的作用,方法增强。就是可以在方法执行前后进行指定逻辑操作。
1.接口
package com.lt.test.service;
public interface UserService {
void func();
void func2();
}
2.目标类实现
package com.lt.test.service.impl;
import com.lt.test.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public void func() {
System.out.println("目标类方法1");
}
}
3..静态代理类:需要实现接口,不容易扩展,实现简单。 原理:将目标类对象传进来。 外部就可以通过代理类对象来调用目标类对象了
package com.lt.test.staticproxy;
import com.lt.test.service.UserService;
public class StaticUserService implements UserService {
private UserService userService;
public StaticUserService(UserService userService){
this.userService = userService;
}
@Override
public void func() {
System.out.println("before func");
userService.func();
System.out.println("after func");
}
@Override
public void func2() {
System.out.println("before func2");
userService.func2();
System.out.println("after func2");
}
}
4.使用代理类调用目标类
package com.lt.test;
import com.lt.test.service.Animal;
import com.lt.test.service.UserService;
import com.lt.test.service.impl.AniamlImpl;
import com.lt.test.service.impl.UserServiceImpl;
import com.lt.test.staticproxy.AnimalStaticProxy;
import com.lt.test.staticproxy.StaticUserService;
public class demo2 {
public static void main(String[] args) {
//创建静态代理对象 先创建目标对象,把对象传给代理对象
UserService userService = new UserServiceImpl();
StaticUserService staticUserService = new StaticUserService(userService);
//使用代理对象访问目标对象方法
staticUserService.func();
staticUserService.func2();
}
}