让自己留下记忆
享受和热爱生活哦
posts - 12,comments - 8,trackbacks - 0
AOP在Spring中占有很重要的地位,做了一个例子是利用AOP来做一个登陆的身份验证。。希望能对大家有所帮助,使用了AOP可以在不破坏你的代码的前提下帮你完成验证功能。。

转一点AOP的知识:

程序代码:
1、Spring只支持方法拦截,也就是说,只能在方法的前后进行拦截,而不能在属性前后进行拦截。
2、Spring支持四种拦截类型:目标方法调用前(before),目标方法调用后(after),目标方法调用前后(around),以及目标方法抛出异常(throw)。
3、前置拦截的类必须实现MethodBeforeAdvice接口,实现其中的before方法。
4、后置拦截的类必须实现AfterReturningAdvice接口,实现其中的afterReturning方法。
5、前后拦截的类必须实现MethodInterceptor接口,实现其中的invoke方法。前后拦截是唯一可以控制目标方法是否被真正调用的拦截类型,也可以控制返回对象。而前置拦截或后置拦截不能控制,它们不能印象目标方法的调用和返回。



以上可以看出我们要选用实现MethodInterceptor接口的方法来完成这个功能。
代码如下:
接口类的定义:
程序代码:
package com.dragon.study;
public interface ILogin {
    public void login(String name);
}


接口实现类的定义:
程序代码:
package com.dragon.study.Impl;
import com.dragon.study.ILogin;
public class LoginImpl implements ILogin {
    /**
     * Login
     */
    public void login(String name) {
        System.out.println("欢迎 " + name + "登陆!");
    }
}


最重要的拦截器的定义:
程序代码:
package com.dragon.Advice;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class LoginInterceptor implements MethodInterceptor {
    /**
     * Interceptor
     */
    public Object invoke(MethodInvocation arg0) throws Throwable {
        String name = (String)arg0.getArguments()[0];
        if (name.equals("flash")) {
            System.out.println("这才是真正的用户! ");
            return arg0.proceed();
        } else {
            System.out.println("非法的用户~~~ ");
            return null;
        }
    }
}

ApplicationContext.XML的定义:
<beans>
<bean id="loginInterceptor" class="com.dragon.Advice.LoginInterceptor"></bean>
<bean id="loginTarget" class="com.dragon.study.Impl.LoginImpl"></bean>
<bean id="login" class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="proxyInterfaces">
    <value>com.dragon.study.ILogin</value>
  </property>
  <property name="interceptorNames">
    <list>
     <value>loginInterceptor</value>
   </list>
  </property>
  <property name="target">
    <ref bean="loginTarget"/>
  </property>
</bean>
</beans>




OK,以上就是所有代码,下面做一个测试类:
Test类定义:
程序代码:
package com;
import Java.io.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXMLApplicationContext;
import com.dragon.study.ILogin;
public class Test {
    public static void main(String[] args) throws IOException {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.XML");
        ILogin login = (ILogin)ctx.getBean("login");
        login.login("flash"); //用户为flash是正确用户,否则是错误的
    }
}
posted on 2010-08-19 22:21 hypon 阅读(190) 评论(0)  编辑  收藏 所属分类: spring

只有注册用户登录后才能发表评论。


网站导航: