spring aop,静态及动态代理例子

@Aspect
@Component
public class AopText {

@Pointcut("execution(public * com.llf.service.*Service.*(..))")
public void leanPoint(){
}

@Before("leanPoint()")
public void before(){
System.out.print("前置...");
}

@After("leanPoint()")
public void after(){
System.out.print("后置..");
}

}

静态代理实现:接口实现
public interface JingtaiService {

public void save();
public void del();
}

public class JingtaiServiceImpl implements JingtaiService {
@Override
public void save() {
System.out.print("保存数据");
}

@Override
public void del() {
System.out.print("删除数据");
}
}


public class JingtaiProxy implements JingtaiService {

@Autowired
private JingtaiService target;

public JingtaiProxy(JingtaiService target){
this.target = target;
}

@Override
public void save() {
System.out.print("开始事物");
target.save();
System.out.print("结束事物");
}
 @Override
public void del() {
System.out.print("开始事物");
target.del();
System.out.print("结束事物");
}
}

测试:
public static void main(String[] args) {
JingtaiService jm = new JingtaiServiceImpl();
JingtaiProxy jp = new JingtaiProxy(jm);
jp.save();
}

动态代理:不需要接口实现,jdk方式实现
public class DongtaiProxy {

private Object target;
public DongtaiProxy(Object target) {
this.target = target;
}
//ClassLoader loader,:指定当前目标对象使用类加载器,获取加载器的方法是固定的
//Class<?>[] interfaces,:目标对象实现的接口的类型,使用泛型方式确认类型
//InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行目标对象的方法作为参数传入
public Object getProxy(){
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
System.out.print("开始动态事物");
Object returnvalue = method.invoke(target,objects);
System.out.print("提交事物");
return returnvalue;
}
}
);

}

}

测试:
 public static void main(String[] args) {
JingtaiService jm = new JingtaiServiceImpl();
JingtaiService js = (JingtaiService)new DongtaiProxy(jm).getProxy();
js.save();
js.del();
}





转载于:https://www.cnblogs.com/-llf/p/10544300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值