自定义注解加AOP实现

一.自定义注解的基础:
1.注解的定义:Java文件叫做Annotation,用@interface表示。
2.元注解:@interface上面按需要注解上一些东西,包括@Retention、@Target、@Document、@Inherited四种。
3.注解的保留策略:
  @Retention(RetentionPolicy.SOURCE) // 注解仅存在于源码中,在class字节码文件中不包含
  @Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
  @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
4.注解的作用目标:
  @Target(ElementType.TYPE) // 接口、类、枚举、注解
  @Target(ElementType.FIELD) // 字段、枚举的常量
  @Target(ElementType.METHOD) // 方法
  @Target(ElementType.PARAMETER) // 方法参数
  @Target(ElementType.CONSTRUCTOR) // 构造函数
  @Target(ElementType.LOCAL_VARIABLE) // 局部变量
  @Target(ElementType.ANNOTATION_TYPE) // 注解
  @Target(ElementType.PACKAGE) // 包
5.注解包含在javadoc中:
  @Documented
6.注解可以被继承:
  @Inherited
7.注解解析器:用来解析自定义注解。
二.如何定义自定义注解:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginHandle {
	String name() default "默认值";
	// 可以用来定义 最大值 最小值 能不能为空等
}

三.什么是AOP?
所谓AOP也就是面向切面编程,能够让我们在不影响原有业务功能的前提下,横切扩展新的功能。这里面有一个比较显眼的词我们需要注意一下,横切,它是基于横切面对程序进行扩展的。

四.AOP相关术语
在Spring的AOP中有很多的术语,而且容易混淆,大家一定要先搞清楚这几个概念:
连接点(Joinpoint):在程序执行过程中某个特定的点,比如类初始化前、类初始化后,方法调用前,方法调用后;
切点(Pointcut):所谓切点就是你所切取的类中的方法,比如你横切的这个类中有两个方法,那么这两个方法都是连接点,对这两个方法的定位就称之为切点;
增强(Advice):增强是织入到连接点上的一段程序,另外它还拥有连接点的相关信息;
目标对象(Target):增强逻辑的织入目标类,就是我的增强逻辑植入到什么位置;
引介(Introduction):一种特殊的增强,它可以为类添加一些属性喝方法;
织入(Weaving):织入就是讲增强逻辑添加到目标对象的过程;
代理(Proxy):一个类被AOP织入增强后,就会产生一个结果类,他是融合了原类和增强逻辑的代理类;
切面(Aspect):切面由切点和增强组成,他是横切逻辑定义和连接点定义的组成;

五.OP切面如何切入自定义注解:


@Aspect
@Component
public class LoginAspect {
	
	protected final  Logger logger = Logger.getLogger(LoginAspect.class);
	
	@Autowired
	private UserService userService;
	 
	@Pointcut(value = "@annotation(com.dh.op.annotation.LoginHandle)")
	public void LoginHandle() {
	}

	@Before("LoginHandle()")
	public DoResponse verifyIsLogin() {	
		throw new RuntimeException(":该员工已离职通知失败!");
	}
	
}

“六.引入AOP需要配置:”
springmvc.xml 中

xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
		http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd"
        	<aop:aspectj-autoproxy proxy-target-class="false" />  
	<aop:aspectj-autoproxy/>

自定义注解需要的 jar

<!-- http://mvnrepository.com/artifact/org.aspectj/aspectjrt -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjrt</artifactId>
		    <version>1.8.9</version>
		</dependency>
				<!-- http://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjweaver</artifactId>
		    <version>1.8.9</version>
		</dependency>
				<!-- http://mvnrepository.com/artifact/cglib/cglib -->
		<dependency>
		    <groupId>cglib</groupId>
		    <artifactId>cglib</artifactId>
		    <version>3.2.2</version>
		</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值