本文演示的是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");
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



