栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring使用AspectJ注解和XML配置实现AOP

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring使用AspectJ注解和XML配置实现AOP

本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP

下面是使用AspectJ注解实现AOP的Java Project
首先是位于classpath下的applicationContext.xml文件

 
 
   
       
   

   
   
   
 

然后是服务层接口以及实现类

package com.jadyer.annotation; 
public interface UserManager { 
  public void addUser(String username, String password); 
  public void delUser(int userId); 
  public String findUserById(int userId); 
  public void modifyUser(int userId, String username, String password); 
} 
 
 
 
package com.jadyer.annotation; 
 
public class UserManagerImpl implements UserManager { 
  public void addUser(String username, String password) { 
    System.out.println("------UserManagerImpl.addUser() is invoked------"); 
  } 
 
  public void delUser(int userId) { 
    System.out.println("------UserManagerImpl.delUser() is invoked------"); 
  } 
 
  public String findUserById(int userId) { 
    System.out.println("------UserManagerImpl.findUserById() is invoked------"); 
    return "铁面生"; 
  } 
 
  public void modifyUser(int userId, String username, String password) { 
    System.out.println("------UserManagerImpl.modifyUser() is invoked------"); 
  } 
} 

接下来是使用AspectJ注解标注的切入类

package com.jadyer.annotation; 
 
import org.aspectj.lang.annotation.After; 
import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Pointcut; 
 
@Aspect 
public class SecurityHandler { 
   
  @Pointcut("execution(* add*(..))") //匹配所有以add开头的方法 
  private void addAddMethod(){}; 
   
   
  //@Before("addAddMethod()") 
  @After("addAddMethod()") 
  private void checkSecurity() { 
    System.out.println("------【checkSecurity is invoked】------"); 
  }     
} 

最后是客户端测试类

package com.jadyer.annotation; 
 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
 
 
public class Client { 
  public static void main(String[] args) { 
    ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    UserManager userManager = (UserManager)factory.getBean("userManager"); 
    userManager.addUser("张起灵", "02200059"); 
  } 
} 

下面是使用XML配置文件实现AOP的Java Project
首先是位于src根目录中的applicationContext-cglib.xml文件

 
 

   
   
   
   
   
   
   
   
      


     
   
 
 
 

然后是服务层接口以及实现类

package com.jadyer.cglib; 
public interface UserManager { 
  public void addUser(String username, String password); 
  public void delUser(int userId); 
  public String findUserById(int userId); 
  public void modifyUser(int userId, String username, String password); 
} 
 
 
 
package com.jadyer.cglib; 
 
public class UserManagerImpl {  
//implements UserManager { 
  public void addUser(String username, String password) { 
    System.out.println("------UserManagerImpl.addUser() is invoked------"); 
  } 
 
  public void delUser(int userId) { 
    System.out.println("------UserManagerImpl.delUser() is invoked------"); 
  } 
 
  public String findUserById(int userId) { 
    System.out.println("------UserManagerImpl.findUserById() is invoked------"); 
    return "张三"; 
  } 
 
  public void modifyUser(int userId, String username, String password) { 
    System.out.println("------UserManagerImpl.modifyUser() is invoked------"); 
  } 
} 

接着是在applicationContext-cglib.xml中所指定的切入类

package com.jadyer.cglib; 
 
import org.aspectj.lang.JoinPoint; 
 
 
public class SecurityHandler { 
  private void checkSecurity(JoinPoint joinPoint) { 
    for (int i=0; i

最后是客户端测试类

package com.jadyer.cglib; 
 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
 
 
public class Client { 
  public static void main(String[] args) { 
    ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext-cglib.xml"); 
     
    //当UserManagerImpl实现了UserManager接口的情况下,这时Spring会自动使用JDK动态代理 
    //如果项目已经引入cglib库,并在配置文件中强制使用CGLIB代理,此时Spring才会使用CGLIB代理 
    //UserManager userManager = (UserManager)factory.getBean("userManager"); 
     
    //由于此时的UserManagerImpl并没有实现UserManager接口,所以接收类型就不能再使用UserManager接口 
    //并且项目中已经引入了cglib库,尽管配置文件中没有强制使用CGLIB代理,但Spring会自动使用CGLIB代理    
    UserManagerImpl userManager = (UserManagerImpl)factory.getBean("userManager"); 
     
    userManager.addUser("吴三省", "02200059"); 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/148881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号