java 切面 注解_十、使用注解定义切面

一、本课目标

掌握使用注解实现AOP的方法

二、使用注解定义切面

2.1简介

AspectJ

面向切面的框架,它扩展了Java语言,定义了AOP语法,能够在编译期提供代码的织入。

@AspectJ

AspectJ5新增的功能,使用JDK5.0注解技术和正规的AspectJ切点表达式语言描述切面(所以在使用@AspectJ的时候,要保证所用的JDK是5.0或者以上的版本)

Spring通过集成AspectJ实现了以注解的方式定义增强类,大大减少了配置文件中的工作量

利用轻量级的字节码处理框架asm处理@AspectJ中所描述的方法参数名

2.2示例

需求:使用注解来实现日志切面

分析:

1、使用注解定义前置增强和后置增强实现日志功能

2、编写Spring配置文件,完成切面织入

image.png

实体类:

package entity;

/**

* 用户实体类

*/

public class User implements java.io.Serializable {

private Integer id; // 用户ID

private String username; // 用户名

private String password; // 密码

private String email; // 电子邮件

// getter & setter

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

}

增强类:

package aop;

import java.util.Arrays;

import org.apache.log4j.Logger;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

/**

* 增强处理类

* @author Administrator

*

*/

@Aspect

public class UserServiceLogger {

private static Logger log = Logger.getLogger(UserServiceLogger.class);

@Before("execution(* service.UserService.*(..))")

public void before(JoinPoint jp) {

log.info("调用" + jp.getTarget() + "的" +

jp.getSignature() + "方法,方法参数" +

Arrays.toString(jp.getArgs()));

}

public void afterReturning(JoinPoint jp, Object result) {

log.info("调用" + jp.getTarget() + "的" +

jp.getSignature() + "方法,方法返回值" +

result);

}

}

dao层:

package dao;

import entity.User;

/**

* 增加DAO接口,定义了所需的持久化方法

*/

public interface UserDao {

public void save(User user);

}

package dao.impl;

import org.springframework.stereotype.Repository;

import dao.UserDao;

import entity.User;

/**

* 用户DAO类,实现UserDao接口,负责User类的持久化操作

*/

@Repository("userDao

你可能感兴趣的:(java,切面,注解)