aspectj相关知识
-
Eclipse AspectJEclipse AspectJ(以下简称AspectJ)是一个对java语言的,无缝的面向切面的扩展。跟java平台是兼容的易于学习和使用的一个组件。AspectJ主要由Pivotal公司贡献代码AspectJ compiler 支持jdk1.4以后的版本,eclipse安装插件:AJDT:http://www.eclipse.org/ajdt/-----------未完待续
-
AspectJ在Spring中的使用在上一篇AspectJ的入门中,简单的介绍了下AspectJ的使用,主要是以AspectJ的example作为例子。介绍完后也留下了几个问题:1)我们在spring中并没有看到需要aspectj之类的关键词,而是使用java代码就可以了,这是如何做到的2)Spring中如何做到不使用特殊的编译器实现aop的(AspectJ如何在运行期使用)3)Spring源码中与aspectJ 相关的AjType究竟是啥?这篇文章会继续试着解决这几个问题。aspectJ的几种织入方式compile-time、post-compile 和 load-time Weavers首先了解下AspectJ的几种织入方式,分别是compile-time、post-compile 和 load-time,分别对应着编译期、后编译期、加载期织入编译期织入首先是编译期织入,上一篇博客所介绍的方式就是使用的编译期织入。很容易理解,普通的java源码 + aspectJ特殊语法的‘配置’ 文件 + aspectJ特殊的编译器,编译时候生成已织入
-
Spring 中基于 AOP 的 @AspectJSpring 中基于 AOP 的 @AspectJ@AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格。通过在你的基于架构的 XML 配置文件中包含以下元素,@AspectJ 支持是可用的。<aop:aspectj-autoproxy/>你还需要在你的应用程序的 CLASSPATH 中使用以下 AspectJ 库文件。这些库文件在一个 AspectJ 装置的 ‘lib’ 目录中是可用的,如果没有,你可以在 Internet 中下载它们。aspectjrt.jaraspectjweaver.jaraspectj.jaraopalliance.jar 声明一个 aspectAspects 类和其他任何正常的 bean 一样,除了它们将会用 @AspectJ 注释之外,它和其他类一样可能有方法和字段,如下所示:package org.xyz; import org.aspectj.lang.annotation.Aspect; @Aspec
-
Spring使用AspectJ开发AOP使用 AspectJ 开发 AOP 通常有两种方式:基于 XML 的声明式。基于 Annotation 的声明式。接下来将对这两种 AOP 的开发方式进行讲解。基于XML的声明式基于 XML 的声明式是指通过 Spring 配置文件的方式定义切面、切入点及声明通知,而所有的切面和通知都必须定义在 <aop:config> 元素中。下面通过案例演示 Spring 中如何使用基于 XML 的声明式实现 AOP 的开发。1. 导入 JAR 包使用 AspectJ 除了需要导入 Spring AOP 的 JAR 包以外,还需要导入与 AspectJ 相关的 JAR 包,具体如下。spring-aspects-3.2.13.RELEASE.jar:Spring 为 AspectJ 提供的实现,在 Spring 的包中已经提供。com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar:是 AspectJ 提供的规范,可以在官方网址 https://repo.
aspectj相关课程
aspectj相关教程
- 3. AspectJ 安全拦截器 AspectJ 安全拦截器和 AOP 联盟安全拦截器类似,但仍有一些不同。AspectJ 安全拦截器的应用类名为 AspectJSecurityInterceptor。不同于 AOP 联盟安全拦截器,它不是基于 Spring 应用上下文来激活拦截器,它通过 AspectJ 编译器实现。多数情况下,同一应用会出现这两种安全拦截器,AspectJ 用于域对象的安全控制,AOP 联盟安全拦截器用于服务层的安全。AspectJSecurityInterceptor 的配置方式如下:<bean id="bankManagerSecurity" class= "org.springframework.security.access.intercept.aspectj.AspectJMethodSecurityInterceptor"><property name="authenticationManager" ref="authenticationManager"/><property name="accessDecisionManager" ref="accessDecisionManager"/><property name="afterInvocationManager" ref="afterInvocationManager"/><property name="securityMetadataSource"> <sec:method-security-metadata-source> <sec:protect method="com.mycompany.BankManager.delete*" access="ROLE_SUPERVISOR"/> <sec:protect method="com.mycompany.BankManager.getBalance" access="ROLE_TELLER,ROLE_SUPERVISOR"/> </sec:method-security-metadata-source></property></bean>可见,除了类名之外,AspectJ 方式与 AOP 联盟方式配置几乎一样。不仅如此,这两个拦截器可以共用 securityMetadataSource 对象。下一步,我们需要定义 AspectJ 的 aspect,例如:package org.springframework.security.samples.aspectj;import org.springframework.security.access.intercept.aspectj.AspectJSecurityInterceptor;import org.springframework.security.access.intercept.aspectj.AspectJCallback;import org.springframework.beans.factory.InitializingBean;public aspect DomainObjectInstanceSecurityAspect implements InitializingBean { private AspectJSecurityInterceptor securityInterceptor; pointcut domainObjectInstanceExecution(): target(PersistableEntity) && execution(public * *(..)) && !within(DomainObjectInstanceSecurityAspect); Object around(): domainObjectInstanceExecution() { if (this.securityInterceptor == null) { return proceed(); } AspectJCallback callback = new AspectJCallback() { public Object proceedWithObject() { return proceed(); } }; return this.securityInterceptor.invoke(thisJoinPoint, callback); } public AspectJSecurityInterceptor getSecurityInterceptor() { return securityInterceptor; } public void setSecurityInterceptor(AspectJSecurityInterceptor securityInterceptor) { this.securityInterceptor = securityInterceptor; } public void afterPropertiesSet() throws Exception { if (this.securityInterceptor == null) throw new IllegalArgumentException("securityInterceptor required"); } }}这段代码中,安全拦截器被应用每一个 PersistableEntity 实例。AspectJCallback 被用于执行 proceed() ,该调用只有在 around() 方法中才能得以执行,当我们需要目标对象继续执行时,这些匿名的回调函数会被调用。下一步,我们需要配置 Spring 加载 aspect 并关联到 AspectJSecurityInterceptor 拦截器中,如下:<bean id="domainObjectInstanceSecurityAspect" class="security.samples.aspectj.DomainObjectInstanceSecurityAspect" factory-method="aspectOf"><property name="securityInterceptor" ref="bankManagerSecurity"/></bean>到这里为止,我们可以随意的创建自己的 bean 对象了,他们都将被安全拦截器覆盖。
- 4. 小结 本节讨论了对象级的安全配置策略,主要内容有:Spring Security 中的安全对象指所有需要被安全限制的对象;Spring Security 通过配置拦截器的方式保护安全对象不受非法访问;Spring Security 的安全对象拦截器分为 AOP 方式和 AspectJ 方式,两种方式的执行时期不同,前置在程序运行过程中动态启用,后者在编译时静态启用;两种拦截器并不影响,通常可以一起使用。下节我们讨论「域对象」的权限配置。
- 3 Kafka使用初体验 从0基础到笑傲大数据的成长必备秘笈
- Scrapy 爬虫框架介绍 Scrapy 是最流行的 Python 爬虫框架
- 网络编程概念介绍 Java 网络编程入门首选
- 架构设计-需要多少个项目 一句话介绍
aspectj相关搜索
-
ajax
android
a href
abap
abap开发
abort
absolutelayout
abstractmethoderror
abstracttablemodel
accept
access
access教程
accordion
accumulate
acess
action
actionform
actionlistener
activity
addeventlistener