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("管理员或者用户登出系统后进行校验....");
    }
    
}


 

posted @ 2017-03-25 15:23  德玛西亚宝宝  阅读(204)  评论(0编辑  收藏  举报