天天看點

Spring中的日志通知

19.1建立一個UserDao的接口;

package com.eduask.aop;

//建立一個USerDao的接口;

public interface UserDao {

void add();

void delete();

void update();

void query();

}

19.2建立一個UserDaoImpl的類實作UserDao;

package com.eduask.aop;

import org.springframework.stereotype.Repository;

@Repository

//建立一個UserDaoImpl實作UserDao接口;

public class UserDaoImpl implements UserDao{

@Override

public void add() {

// TODO Auto-generated method stub

System.out.println("this is add method");

}

@Override

public void delete() {

System.out.println("this is delete method");

}

@Override

public void update() {

System.out.println("this is update method");

}

@Override

public void query() {

System.out.println("this is query method");

}

}

19.3 建立一個UserService的接口;

package com.eduask.aop;

//建立一個UserService的接口;

public interface UserService {

void add();

void delete();

void update();

void query();

}

19.4 建立一個UserServiceImpl類實作UserService

package com.eduask.aop;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

@Service

public class UserServiceImpl implements UserService {

@Resource(name="userDaoImpl")

private UserDao userDao;

@Override

public void add() {

userDao.add();

}

@Override

public void delete() {

// TODO Auto-generated method stub

userDao.delete();

}

@Override

public void update() {

// TODO Auto-generated method stub

userDao.update();

}

@Override

public void query() {

// TODO Auto-generated method stub

userDao.query();

}

}

19.5 建立一個日志通知;

package com.eduask.aop;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.After;

import org.aspectj.lang.annotation.AfterReturning;

import org.aspectj.lang.annotation.AfterThrowing;

import org.aspectj.lang.annotation.Around;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.springframework.stereotype.Component;

@Aspect

@Component

public class LogAspect {

@Around("execution(* com.eduask.aop.UserServiceImpl.*(..))")

public void around(ProceedingJoinPoint joinPoint){

System.out.println(joinPoint.getSignature().getName());

try {

System.out.println("前置通知");

joinPoint.proceed();

System.out.println("後置通知");

} catch (Throwable e) {

System.out.println("異常通知"+e);

}

System.out.println("傳回通知");

}

}

19.6建立一個TestUserDao類;

package com.eduask.aop;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestUserDao {

public static void main(String[] args) {

ClassPathXmlApplicationContext ac=new ClassPathXmlApplicationContext("aopBean.xml");

UserService service=(UserService) ac.getBean("userServiceImpl");

service.add();

service.delete();

service.update();

service.query();

}

}

19.7 建立一個aopBean.xml的配置檔案;

<?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:util="http://www.springframework.org/schema/util"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="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

    http://www.springframework.org/schema/util

    http://www.springframework.org/schema/util/spring-util-4.0.xsd

    http://www.springframework.org/schema/aop

    http://www.springframework.org/schema/aop/spring-aop-4.0.xsd

    ">

<context:annotation-config/>

<context:component-scan base-package="com.eduask.aop"/>

<aop:aspectj-autoproxy/>

</beans>

19.8 程式運作如下:

2016-6-28 22:31:29 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh

資訊: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@593d93f4: startup date [Tue Jun 28 22:31:29 GMT+08:00 2016]; root of context hierarchy

2016-6-28 22:31:30 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions

資訊: Loading XML bean definitions from class path resource [aopBean.xml]

add

前置通知

this is add method

後置通知

傳回通知

delete

前置通知

this is delete method

後置通知

傳回通知

update

前置通知

this is update method

後置通知

傳回通知

query

前置通知

this is query method

後置通知

傳回通知