`
234390216
  • 浏览: 10194047 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460820
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771875
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395479
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393916
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678251
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529318
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178772
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462007
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150167
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66889
社区版块
存档分类
最新评论

Spring Aop(六)——@DeclareParents介绍

阅读更多

6 @DeclareParents介绍

@DeclareParents注解也是Aspectj提供的,在使用基于Aspectj注解的Spring Aop时,我们可以在切面中通过@DeclareParents指定满足指定表达式的类将自动实现某些接口。这个只是在运行时会将生成的代理类实现指定的接口。有接口就会有实现,对应的实现类也需要我们在@DeclareParents声明自动实现的接口时声明。现假设我们有一个接口叫CommonParent,其实现类叫CommonParentImpl,代码如下。

public interface CommonParent {

	public void doSomething();
	
}
public class CommonParentImpl implements CommonParent {

	public void doSomething() {
		System.out.println("-----------do something------------");
	}

}

然后我们希望我们的所有的Service实现类都可以在运行时自动实现CommonParent接口,即所有的Service实现类在运行时都可以被当做CommonParent来使用。那我们可以定义如下这样一个切面类和对应的Advice。

@Component
@Aspect
public class DeclareParentsAspect {

	@DeclareParents(value="com.elim.spring.aop.service..*", defaultImpl=CommonParentImpl.class)
	private CommonParent commonParent;
	
	@Before("bean(userService) && this(commonParent)")
	public void beforeUserService(CommonParent commonParent) {
		commonParent.doSomething();
	}
	
}

如上,我们先在切面类中声明了一个CommonParent类型的属性,然后在上面使用了@DeclareParents注解表示我们需要把CommonParent声明为某些指定类型的父接口,然后通过@DeclareParents的value属性指定需要作用的类的形式,其语法和Pointcut表达式类似。通过defaultImpl属性指定默认CommonParent接口的实现类是CommonParentImpl。然后我们声明了一个before类型的Advice,在其中直接把我们的bean当做CommonParent类型的对象使用。

整个过程就是这样的,非常简单。但是笔者暂时还没有发现这个在实际应用中可以应用于哪些场景,欢迎交流。

参考文档 1、官方文档

(注:本文是基于Spring4.1.0所写,写于2017年1月22日星期日)

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics