Spring中的日志通知

本文介绍了一个使用Spring AOP实现的日志记录系统,包括定义UserDao接口及其实现UserDaoImpl,以及UserService接口和服务实现UserServiceImpl。通过环绕通知实现了对业务方法的前后置、异常和返回通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

19.1新建一个UserDao的接口;

packagecom.eduask.aop;

//新建一个USerDao的接口;

publicinterfaceUserDao {

voidadd();

voiddelete();

voidupdate();

voidquery();

}

19.2新建一个UserDaoImpl的类实现UserDao;

packagecom.eduask.aop;

importorg.springframework.stereotype.Repository;

@Repository

//新建一个UserDaoImpl实现UserDao接口;

publicclassUserDaoImplimplementsUserDao{

@Override

publicvoidadd() {

//TODOAuto-generated method stub

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

}

@Override

publicvoiddelete() {

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

}

@Override

publicvoidupdate() {

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

}

@Override

publicvoidquery() {

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

}

}

19.3 新建一个UserService的接口;

packagecom.eduask.aop;

//新建一个UserService的接口;

publicinterfaceUserService {

voidadd();

voiddelete();

voidupdate();

voidquery();

}

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 {

/*@Before("execution(* com.ask.aop.UserServiceImpl.*(..))")

public void before(){

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

}

@After("execution(* com.ask.aop.UserServiceImpl.*(..))")

public void after(){

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

}

@AfterReturning("execution(* com.ask.aop.UserServiceImpl.*(..))")

public void afterReturn(){

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

}

@AfterThrowing("execution(* com.ask.aop.UserServiceImpl.*(..))")

public void afterThrow(){

System.out.println("异常通知");

}*/

@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类;

packagecom.eduask.aop;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

publicclassTestUserDao {

publicstaticvoidmain(String[] args) {

ClassPathXmlApplicationContext ac=newClassPathXmlApplicationContext("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
后置通知
返回通知

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值