Spring之AOP

来源:互联网 发布:汉化软件安卓版下载 编辑:程序博客网 时间:2024/06/13 21:19

这里写图片描述
代理:又分两种 又称为目标和通知
1:静态代理
接口:
package com.zking.Static;

public interface Artist {

public void shon();

}
Class:

package com.zking.Static;

public class Baoqiang implements Artist{

public void shon() {    // TODO Auto-generated method stubSystem.out.println("来了................");   }

}

Class:
package com.zking.Static;

public class SongZhe implements Artist{

private Artist artist;public SongZhe(Artist artist) {    // TODO Auto-generated constructor stub    this.artist=artist;}public void shon() {    // TODO Auto-generated method stub    artist.shon();}

}
测试类:
package com.zking.testuu;

import org.junit.Test;

import com.zking.Static.Artist;
import com.zking.Static.Baoqiang;
import com.zking.Static.SongZhe;

public class TestArtist {

//静态调用@Testpublic void test() {    Artist artist=new Baoqiang();    Artist songZhe=new SongZhe(artist);    songZhe.shon();}

}

2:动态代理

接口:
package com.zking.dongtaidiaoyong;

public interface Artsit {

public void chang();

}

Class:
package com.zking.dongtaidiaoyong;

public class Liuyang implements Artsit{

public void chang() {    // TODO Auto-generated method stub    System.out.println("111111111.........");}public void tiao() {    System.out.println("2222222.......");}

}
Class:
package com.zking.dongtaidiaoyong;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class LiuyanJingjir implements InvocationHandler{

private Artsit artsit;public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {    // TODO Auto-generated method stubObject object=  method.invoke(artsit, args);    return object;}public Artsit getArtsit() {    return artsit;}public void setArtsit(Artsit artsit) {    this.artsit = artsit;}public LiuyanJingjir(Artsit artsit) {    super();    this.artsit = artsit;}

测试类:
package com.zking.testuu;

import java.lang.reflect.Proxy;

import org.ietf.jgss.Oid;
import org.junit.Test;

import com.zking.dongtaidiaoyong.Artsit;
import com.zking.dongtaidiaoyong.LiuyanJingjir;
import com.zking.dongtaidiaoyong.Liuyang;

/**
* 动态调用
* @author asus
*
*/
public class TestArtsit {

Artsit artsit=new Liuyang();LiuyanJingjir liuyanJingjir=new LiuyanJingjir(artsit);@Testpublic void test() {    artsit=(Artsit) Proxy.newProxyInstance(Liuyang.class.getClassLoader(), Liuyang.class.getInterfaces(), liuyanJingjir);    artsit.chang();    artsit.tiao();}

}
下面是spring的代理和通知
通知 又分3种 分别是 环绕通知,前置通知,和后置通知
接口:
package com.zking.spring;

public interface Atsity {

public void shuiXiaj    ();public void gang();

}
目标: Class:
package com.zking.spring;
/**
* 目标
* @author asus
*
*/
public class Liuyangtamei implements Atsity{

public void shuiXiaj() {    // TODO Auto-generated method stubSystem.out.println("111111...........");    }public void gang() {    // TODO Auto-generated method stubSystem.out.println("2222222......");    }

}
环绕通知:
package com.zking.spring;
/**
* 环绕通知
*/
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class Liuyangtongz implements MethodInterceptor{

public Object invoke(MethodInvocation arg0) throws Throwable {    // TODO Auto-generated method stub]arg0    Object o=arg0.proceed();    return o;}

}

前置通知:
package com.zking.spring;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class QiangBazhi implements MethodBeforeAdvice{

public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {    // TODO Auto-generated method stub    System.out.println("1111111");}

}
后置通知:
package com.zking.spring;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class Houzhi implements AfterReturningAdvice{

public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {    // TODO Auto-generated method stub    System.out.println("了.......");}

}

spring当然就是配置applicationContext.xml就好了

直接上代码的或出不来我也不知道为什么 只好贴图了

这里写图片描述

spring的测试:
package com.zking.testuu;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zking.spring.Atsity;

public class TestSpring {

public static void main(String[] args) {    new TestSpring().test();}private void test() {    ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");    Atsity atsity=(Atsity) applicationContext.getBean("myLiuyang");

// atsity.shuiXiaj();
atsity.gang();
}
}

好咯 这就是一个spring aop的简单操作

                                    xx
原创粉丝点击