顾问Advisor Aspectj注解
顾问Advisor
通知 advice
PointcutAdvisor 一个接口 是顾问的一种、
. 任意单个字符
+ 重复1到多次
* 重复0到多次
NameMetchMethodPointcutAdvisor 名称匹配方法顾问
public interface SomeAdiver {
public void daSome();
public void dadent(); }
public class SellAdiver implements SomeAdiver {
public void daSome() {
System.out.println("==========dasome=========");
} public void dadent() {
System.out.println("============dadent=========");
}
}
public class beforeAdvisor implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("===========前置=============");
}
}
applicationContestSpringNameAdiver.xml
<!--目标对象-->
<bean id="SellAdiver" class="cn.happy.NamemethAdvisor.SellAdiver"></bean>
<!--增强-->
<bean id="beforeall" class="cn.happy.NamemethAdvisor.beforeAdvisor"></bean>
<!--增强 顾问-->
<bean id="beforAdivsor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="advice" ref="beforeall"></property>
<property name="mappedNames" value="daSome"></property>
</bean>
<!--aop-->
<bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="target" ref="SellAdiver"></property>
<property name="interceptorNames" value="beforAdivsor"></property>
</bean>
测试类:
public class SpringAdvisor {
@Test
public void adcisor(){
ApplicationContext cto=new ClassPathXmlApplicationContext("applicationContestSpringNameAdiver.xml");
SomeAdiver sep= (SomeAdiver) cto.getBean("proxyService");
sep.dadent();
sep.daSome();
} }
测试结果类:
============dadent=========
===========前置=============
==========dasome=========
--------------------------------------------------------------------------------------
RegexpMethodPointcutAdvisor正则表达式匹配方法切入点顾问
public interface SomeAdiver {
public void daSome();
public void dadent(); }
public class SellAdiver implements SomeAdiver {
public void daSome() {
System.out.println("==========dasome=========");
} public void dadent() {
System.out.println("============dadent=========");
}
}
public class beforeAdvisor implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("===========前置=============");
}
}
applicationContestSpringRegexAdisor.xml
<!--01.目标对象-->
<bean id="someService" class="cn.happy.RegexpMethAdxisor.SellAdiver"></bean> <!--02.增强 通知-->
<bean id="beforeAdvice" class="cn.happy.RegexpMethAdxisor.beforeAdvisor"></bean> <!--增强 正则 顾问-->
<bean id="beforeAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="beforeAdvice"></property>
<property name="pattern" value=".*d.*" ></property>
</bean>
<!--03.aop -->
<bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--配置需要增强的目标对象-->
<property name="target" ref="someService"></property> <!--做怎么样的增强-->
<property name="interceptorNames" value="beforeAdvisor"></property> </bean>
测试类:
public class RegexAdvisor {
@Test
public void Rex(){
ApplicationContext ctk=new ClassPathXmlApplicationContext("applicationContestSpringRegexAdisor.xml");
SomeAdiver som= (SomeAdiver) ctk.getBean("proxyService");
som.daSome();
som.dadent();
}
}
正则表达式测试结果:
===========前置=============
==========dasome=========
===========前置=============
============dadent=========
--------------------------------------------------------------------
DefaultAdvisorAutoProxyCreator 默认顾问自动代理
public interface SomeProjoin {
public void add();
public void edd();
}
//前置通知
public class MyBefore implements MethodBeforeAdvice{
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("----前置通知----");
}
}
//后置通知
public class MyAfter implements AfterReturningAdvice {
public void afterReturning(Object o, Method method, Object[] objects, Object o1) throws Throwable {
System.out.println("---后置通知----");
}
}
public class Isomeproing implements SomeProjoin {
public void add() {
System.out.println("-----------再见------------");
} public void edd() {
System.out.println("----------不曾说再见-------");
}
}
applicationContestSpringDefault.xml
<!--目标对象-->
<bean id="ssomeproing" class="cn.happy.DefaultCreator.Isomeproing"></bean>
<!--增强 通知-->
<bean id="beforea" class="cn.happy.DefaultCreator.MyBefore"></bean>
<bean id="after" class="cn.happy.DefaultCreator.MyAfter"></bean> <!--增强 前置顾问-->
<bean id="beforAdivsor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="beforea"></property>
<property name="pattern" value=".*d.*"></property>
</bean>
<!--增强 后置顾问-->
<bean id="afterAdivsor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="after"></property>
<property name="pattern" value=".*d.*"></property>
</bean>
<!--aop-->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
默认自动代理测试类;
public class SpringDefault {
@Test
// 03.默认Advisor自动代理生成器
public void defau(){
ApplicationContext con=new ClassPathXmlApplicationContext("applicationContestSpringDefault.xml");
SomeProjoin som= (SomeProjoin) con.getBean("ssomeproing");
som.add();
som.edd();
}
}
默认自动代理测试类:
----前置通知----
-----------再见------------
---后置通知----
----前置通知----
----------不曾说再见-------
---后置通知----
--------------------------------------------------------------------------------------------
BeanName自动代理生成器
public interface BSome {
public void one();
public void two();
}
public class Bsomeimpl implements BSome {
public void one() {
System.out.println("人生若是无误!");
} public void two() {
System.out.println("铅笔何须橡皮!");
}
}
//前置通知
public class MyBefore implements MethodBeforeAdvice {
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("************前置通知**************");
}
}
applicationContestSpringBeanName.xml
<!--目标对象-->
<bean id="Bsomeimpl" class="cn.happy.SpringBeanNameCare.Bsomeimpl"></bean>
<!--增强 通知-->
<bean id="beforea" class="cn.happy.SpringBeanNameCare.MyBefore"></bean> <!--增强 前置顾问-->
<bean id="beforAdivsor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="beforea"></property>
<property name="pattern" value=".*d.*"></property>
</bean> <!--aop-->
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames" value="Bsomeimpl"></property>
<property name="interceptorNames" value="beforea"></property>
</bean>
BeanName测试类:
public class SpringBeanName {
//BeanName自动代理生成器
@Test
public void beanname(){
ApplicationContext appl=new ClassPathXmlApplicationContext("applicationContestSpringBeanName.xml");
BSome sd= (BSome) appl.getBean("Bsomeimpl");
sd.one();
sd.two();
}
}
BeanName测试结果:
************前置通知**************
人生若是无误!
************前置通知**************
铅笔何须橡皮!
---------------------------------------------------------------------------------------------
注解Aspectj
public interface SomeAdiver {
public void daSome();
public void dadent(); }
public class SellAdiver implements SomeAdiver {
public void daSome() {
System.out.println("==========dasome=========");
} public void dadent() {
System.out.println("============dadent=========");
}
}
//前置增强内容
@Before(value = "execution(* *..springaspectj.*.*(..))")
public void mybefore(){
System.out.println("=========前置增强内容=========");
}
//后置增强内容
@AfterReturning(value = "execution(* *..springaspectj.*.*(..))")
public void myafterring(){
System.out.println("========后置增强内容=========");
}
//环绕增强内容
@Around(value ="execution(* *..springaspectj.*.*(..))" )
public Object rouing(ProceedingJoinPoint proceed)throws Throwable{
System.out.println("环绕前增强内容");
Object result=proceed.proceed();
System.out.println("环绕后增强内容");
if(result!=null){
String str= (String) result;
return str.toUpperCase();
}else {
return null;
}
}
applicationContestSpringAspectj.xml
<!--注解Aspectj-->
<!--目标对象-->
<bean id="SellAdiver" class="cn.happy.springaspectj.SellAdiver"></bean>
<!--增强 通知-->
<bean class="cn.happy.springaspectj.MyAsjectsj"></bean>
<aop:aspectj-autoproxy/>
测试类:
public class SpringAspectj {
@Test
public void tent(){
ApplicationContext apl=new ClassPathXmlApplicationContext("applicationContestSpringAspect.xml");
SomeAdiver ss= (SomeAdiver) apl.getBean("SellAdiver");
ss.dadent();
ss.daSome();
}
}
前置增强内容结果
=========前置增强内容=========
============dadent=========
=========前置增强内容=========
==========dasome=========
后置增强内容结果
============dadent=========
========后置增强内容=========
==========dasome=========
========后置增强内容=========
环绕增强内容结果
环绕前增强内容
============dadent=========
环绕后增强内容
环绕前增强内容
==========dasome=========
环绕后增强内容
顾问Advisor Aspectj注解的更多相关文章
- SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP
AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...
- Spring——AOP(面向切面编程)@AspectJ注解方式
一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...
- SSM-Spring-17:Spring中aspectJ注解版
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP 语法,能够在编译期提供 ...
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- spring-AOP框架(基于AspectJ注解配置AOP)
基于AspectJ注解配置AOP 1.加入jar包: 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.w ...
- Spring使用AspectJ注解和XML配置实现AOP
本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...
- Spring学习(十八)----- Spring AOP+AspectJ注解实例
我们将向你展示如何将AspectJ注解集成到Spring AOP框架.在这个Spring AOP+ AspectJ 示例中,让您轻松实现拦截方法. 常见AspectJ的注解: @Before – 方法 ...
随机推荐
- Python使用multiprocessing实现一个最简单的分布式作业调度系统
Python使用multiprocessing实现一个最简单的分布式作业调度系统介绍Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机 ...
- zynq交叉编译环境设置
环境准备 Vmware 虚拟机:ubuntu14.04 下载安装文件 环境设置 按照上面地址下载 xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin 将das ...
- 屏蔽iframe中超链接
<style type="text/css"> .mask { position: absolute; width: 290px; height: 96px; z-in ...
- windows下mysql5.1忘记root密码解决方法[win7]
步骤如下:1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql2.使用 mysqld –skip-grant-tables 命令启动mysql数据库 D:\> ...
- Codeforces1107E Vasya and Binary String 记忆化dp
Codeforces1107E 记忆化dp E. Vasya and Binary String Description: Vasya has a string \(s\) of length \(n ...
- jQuery.ajax各种参数及属性设置
$.ajax({ type: "post", url: url, dataType:'html', success: funct ...
- B - School Marks
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Little ...
- Android开发相关工具(eclipse篇)
ADT 安装该工具后才能配置Android SDK包,使可以在eclipse里开发Android程序 AVD Android模拟器管理工具,创建删除Android模拟器 SDK Manager And ...
- ASP.NET Core会议管理平台实战_2、基本概念的理解
id Token携带用户的信息 AccessToken:是否有权限访问资源 看数据库的表,Client相关的表,api的相关的表 Resources把用户的简介抽象出来到IdentityClaims表 ...
- 数据可视化-svg入门基础(二)
接上一篇:数据可视化-svg入门基础(一),基础一主要是介绍了svg概念,元素样式设置等. svg是(scalable vector graphic)伸缩矢量图像. 一.目录 (1)图形元素 (2)文 ...