jdk动态代理(aop原理)

  1. --------------------------------------------申明一个接口 这个是非常重要的---------------------------------------
  1. publicinterfaceIUser{
  2. publicvoidaddUser(UserBeanuser);
  3. publicStringfindUserById(intstuId);
  4. }

-


------------------------------------------写个类实现这个接口-----------------------------------------------------------

  1. publicclassUserImplimplementsIUser{
  2. publicvoidaddUser(UserBeanuser){
  3. System.out.println("-----------addUser------------");
  4. }
  5. publicStringfindUserById(intstuId){
  6. System.out.println("-----------findUser------------");
  7. return"Jeson";
  8. }
  9. }

---------------------------------------------------------------------------------------------------------------------------------------

下面我要在增和查的方法执行前做权限验证(securityCheck)

但是传统的写法是在调用的方法前写上这个方法 但是每个方法都写 不管是在开发期间还是维护期间都很麻烦

那我们完全可以写个动态代理 为我们的方法实现类创建动态代理 这样无需我们关注一些公共的代码 比如 权限验证啊 日志写入之类的 我们只要关注我们自己的逻辑代码就行了

具体实现如下

------------------------------------------------------创建动态代理----------------------------------------------------------

  1. publicclassSecurityHandlerimplementsInvocationHandler{
  2. /*
  3. InvocationHandler是代理实例的调用处理程序实现的接口。
  4. 每个代码实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke方法。*/
  5. privateObjectobjectTarget;
  6. publicObjectgetNewObjectProxy(ObjectobjectTarget)//取得代理类
  7. {
  8. this.objectTarget=objectTarget;
  9. returnProxy.newProxyInstance(objectTarget.getClass().getClassLoader(),objectTarget.getClass().getInterfaces(),this);
  10. /*
  11. Proxy
  12. 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
  13. newProxyInstance(ClassLoaderloader,Class<?>[]interfaces,InvocationHandlerh)
  14. 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
  15. */
  16. }
  17. publicObjectinvoke(Objectobject,Methodmethod,Object[]objs)throwsThrowable{
  18. checkSecurity();
  19. Objectret=null;//方法调用后的返回值接受变量
  20. try
  21. {
  22. ret=method.invoke(objectTarget,objs);
  23. }catch(Exceptione)
  24. {
  25. e.printStackTrace();
  26. }
  27. returnret;
  28. }
  29. publicvoidcheckSecurity()
  30. {
  31. System.out.println("----------securitychecking---------------");
  32. }
  33. }
  • -------------------------------------------------------测试----------------------------------------------------------

    1. publicclassDynamicProxy{
    2. /**
    3. *@paramargs
    4. */
    5. publicstaticvoidmain(String[]args){
    6. UserBeanub=newUserBean();
    7. SecurityHandlerhandler=newSecurityHandler();
    8. IUseruser=(IUser)handler.getNewObjectProxy(newUserImpl());
    9. user.findUserById(11);
    10. }
    11. }


    -----------------------------------------------------------输出-------------------------------------------------

    ----------security checking---------------
    -----------find User------------

    你可能感兴趣的:(AOP,jdk,Security)