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
后置通知
返回通知