配置目标对象
package cn.itcast.service;
public class UserServiceImpl implements UserService{
@Override
public void save() {
System.out.println("保存用户");
}
@Override
public void delete() {
System.out.println("删除用户");
}
@Override
public void update() {
System.out.println("更新用户");
}
@Override
public void find() {
System.out.println("查询用户");
}
}这里写代码片
————————————————————————————————-
配置通知对象
package cn.itcast.d_springaop;
import org.aspectj.lang.ProceedingJoinPoint;
//通知类
public class MyAdvice {
//前置通知
//(目标方法运行之前调用)
//后置通知(如果出现异常不会调用)
//(目标方法运行之后调用)
//环绕通知
//(目标方法运行之前和之后都调用)
//异常拦截通知
//(出现异常就会调用)
//后置通知(无论是否出现异常都会调用)
//(目标方法运行之后调用)
//前置通知
public void before(){
System.out.println("这是前置通知");
}
//后置通知
public void afterReturning(){
System.out.println("这是后置通知(如果出现异常不会调用");
}
//环绕通知
public Object around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("这是环绕通知之前!!!!!!!");
Object proceed = pjp.proceed();//调用目标方法
System.out.println("这是环绕通知之后");
return proceed;
}
//异常通知
public void afterException(){
System.out.println("出事了!出现异常");
}
public void after(){
System.out.println("知识后置通知(出现异常也会条用)");
}
}
配置applicationContext.xml
“`
Demo
package cn.itcast.d_springaop;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import cn.itcast.bean.User;
import cn.itcast.service.UserService;
@RunWith(SpringJUnit4ClassRunner.class)//帮我们创建容器
//指定创建容器时使用那个配置文件
@ContextConfiguration(“classpath:cn/itcast/d_springaop/applicationContext.xml”)
public class Demo {
//将名为user的对象注入到u变量中
@Resource(name=”userService”)
private UserService us;
@Test
public void fun1(){
us.save();
}
}
—————-这里写代码片
—
测试结果
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
这是前置通知
这是环绕通知之前!!!!!!!
保存用户
知识后置通知(出现异常也会条用)
这是环绕通知之后
这是后置通知(如果出现异常不会调用