一.自定义类实现AOP
自定义类来实现AOP,首先真正的代理对象就是这个自定义类,这个自定义类中的方法就是对service的拓展。
接口:
package top.lostyou.service;
public interface UserService {
public void add();
public void delete();
public void update();
public void query();
}
真实对象:
package top.lostyou.service;
public class UserServiceImp implements UserService {
public void add() {
System.out.println("增加了一个用户!");
}
public void delete() {
System.out.println("删除了一个用户");
}
public void update() {
System.out.println("更新了一个用户");
}
public void query() {
System.out.println("查询了一个用户");
}
}
自定义类:
package top.lostyou.log;
import java.util.Date;
public class Diy {
public void start(){
System.out.println("此方法开始运行"+ new Date());
}
public void last(){
System.out.println("此方法运行完成"+new Date());
}
}
spring配置(自定义类配置模板):
<bean id="diy" class="top.lostyou.log.Diy"/> <aop:config> <!-- 切点 --> <aop:pointcut id="cut" expression="execution(* top.lostyou.service.UserServiceImp.*(..))"/> <!--自定义切面,ref,引入代理类--> <aop:aspect ref="diy"> <!--通知,及代理对象的方法--> <aop:before method="start" pointcut-ref="cut"/> <aop:after method="last" pointcut-ref="cut"/> </aop:aspect> </aop:config>
二.注解实现AOP
接口:
package top.lostyou.service;
public interface UserService {
public void add();
public void delete();
public void update();
public void query();
}
真实对象:
package top.lostyou.service;
public class UserServiceImp implements UserService {
public void add() {
System.out.println("增加了一个用户!");
}
public void delete() {
System.out.println("删除了一个用户");
}
public void update() {
System.out.println("更新了一个用户");
}
public void query() {
System.out.println("查询了一个用户");
}
}
注解AOP(即AOP代理)
package top.lostyou.log;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect //标志这是一个切面
public class annotionBean {
@Before("execution(* top.lostyou.service.UserServiceImp.*(..))")
public void before(){
System.out.println("----方法执行前");
}
@After("execution(* top.lostyou.service.UserServiceImp.*(..))")
public void after(){
System.out.println("----方法执行后");
}
//环绕增强
@Around("execution(* top.lostyou.service.UserServiceImp.*(..))")
public void arode(ProceedingJoinPoint jp) throws Throwable {
System.out.println("环绕前");
Signature signature = jp.getSignature();//获得签名
System.out.println(signature);
Object proceed = jp.proceed(); //这个公式代表的是 真实对象执行方法,即userServiceImp中的方法
System.out.println("环绕后");
}
}
spring中注册配置:
<!--方式三:使用注解--> <bean id="ann" class="top.lostyou.log.annotionBean"/> <!--开启注解支持--> <aop:aspectj-autoproxy/>
这里一定要注意开启注解支持!!!