AOP管理控制日志入门
1 首先 加入
AspectJ和aop相关的jar包或者依赖坐标
2 定义简单的业务逻辑方法,并用spring注解实例化业务组件和管理组件生命周期:
3 定义切面类【用来向业务逻辑方法中添加日志或者校验】
4 增加spring配置文件,并在配置文件中加入 Spring IOC 容器中启用 AspectJ 注解支持,需要在配置文件中加入<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
5 测试
1 加入jar包。。。。这里略
2 业务逻辑... 下面是业务组件中的登录接口有两个行为,用户的登录和登出。 在登录和登出前 加入一些日志
public interface Login { /** * 用户登录 */ public void login(); /** * 用户登出 */ public void logout(); } import org.springframework.stereotype.Service; @Service public class LoginImpl implements Login{ private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Override public void login() { System.out.println("XXX管理员 于"+sdf.format(new Date())+" 登录系统!"); } @Override public void logout() { System.out.println("XXX管理员 于"+sdf.format(new Date())+" 登出系统!"); } }
3 定义切面类 代码如下【前置通知】
@Aspect @Component public class LogAspect { @Before("execution(public void com.xuanyuan.LoginImpl.*())") public void before(){ System.out.println("管理员或者用户登录系统前进行校验...."); } }
4 配置spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="cn.bean.service"></context:component-scan> <!-- 配置自动为匹配 aspectJ 注解的 Java 类生成代理对象 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy> </beans>
5 测试代码:
public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); Login login = (Login) context.getBean(Login.class); login.login(); login.logout(); } }
。。。 前置通知和后置通知
@Aspect
@Component
public class LogAspect {
@Before("execution(public void com.xuanyuan.LoginImpl.*())")
public void before(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
if(methodName.equals("login"))
System.out.println("管理员或者用户登录系统前进行校验....");
else
System.out.println("管理员或者用户登出系统前进行校验....");
}
@After("execution(public void com.xuanyuan.LoginImpl.*())")
public void after(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
if(methodName.equals("login"))
System.out.println("管理员或者用户登录系统后进行校验....");
else
System.out.println("管理员或者用户登出系统后进行校验....");
}
}