顾问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注解的更多相关文章

  1. SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP

    AOP(Aspect Oriented Programming),是面向切面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP之所以能得到广泛应用,主要是因为它将应用系统拆分分了2个部分 ...

  2. Spring——AOP(面向切面编程)@AspectJ注解方式

    一.什么是AOP? AOP: (Aspect Oriented Programming)即面向切面编程. 试想这样的场景:项目中需要在业务方法执行完打印日志记录.最笨的办法就是在每个方法核心业务执行完 ...

  3. SSM-Spring-17:Spring中aspectJ注解版

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言,定义了AOP 语法,能够在编译期提供 ...

  4. Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探

    由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...

  5. Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

    本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...

  6. spring AOP 之二:@AspectJ注解的3种配置

    @AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...

  7. spring-AOP框架(基于AspectJ注解配置AOP)

    基于AspectJ注解配置AOP 1.加入jar包: 要在Spring应用中使用AspectJ注解,必须在classpath下包含AspectJ类库:aopalliance.jar.aspectj.w ...

  8. Spring使用AspectJ注解和XML配置实现AOP

    本文演示的是Spring中使用AspectJ注解和XML配置两种方式实现AOP 下面是使用AspectJ注解实现AOP的Java Project首先是位于classpath下的applicationC ...

  9. Spring学习(十八)----- Spring AOP+AspectJ注解实例

    我们将向你展示如何将AspectJ注解集成到Spring AOP框架.在这个Spring AOP+ AspectJ 示例中,让您轻松实现拦截方法. 常见AspectJ的注解: @Before – 方法 ...

随机推荐

  1. [原创]java操作word(一)

    一. 需求背景 在做项目的过程中,经常会遇到要把数据库数据导出到Word文件中的需求,因为很多情况下,我们需要将数据导出到WORD中进行打印.此需求可以通过用程序填充数据到word模板中来实现.所谓模 ...

  2. CMD help

    ASSOC 显示或修改文件扩展名关联. ATTRIB 显示或更改文件属性. BREAK 设置或清除扩展式 CTRL+C 检查. BCDEDIT 设置启动数据库中的属性以控制启动加载. CACLS 显示 ...

  3. EnumDescription

    using System; using System.Reflection; using System.Collections; using System.Collections.Generic; n ...

  4. 动态链接库的ELF头分析

    ELF(Executable and Linking Format)用于存储Linux程序. ELF文件分三种类型: 1.目标文件(通常是.o); 2.可执行文件(我们的运行文件)   3.动态库(. ...

  5. AutoIT:界面与自动化操作结合来简化日常劳动: .Net Reactor验证License,设置License,创建License,截图AutoIt自动化实现。(七)

    版本六中存在一个显著问题是: 当exe文件生存之后,运行的时候,通过consoleWrite函数打印出来的数据是无法展示出来的.这就存在一个问题:当运行失败的时候,我还是看不到任何log信息. 于是, ...

  6. ceph学习之pool

    pool是ceph存储数据时的逻辑分区,它起到namespace的作用.其他分布式存储系统,比如Mogilefs.Couchbase.Swift都有pool的概念,只是叫法不同.每个pool包含一定数 ...

  7. Locked Treasure

    题意: 有一宝箱,宝箱上有一些锁,有n个人,每个人分管一些钥匙(每个锁对应无数个钥匙), 现给出n,m 求问至少需要多少锁才能存在一种钥匙分配方案使得: 1.至少m个人才可以打开锁. 2.任选m个人一 ...

  8. IP地址库解析——读取IP地址获得实际地理位置信息的java源码实现

    说明:IP地址库来自QQwry.dat数据库文件,通过解析地址库当中的ip,已经细化最后获取的信息:获取ip地址对应的:国家 / 省 / 市 / 运营商ISP信息. 解析主要用到三个类: (1) IP ...

  9. Flutter实战视频-移动电商-16.补充_保持页面状态

    16.补充_保持页面状态 修正一个地方: 设置了item的高度为380 横向列表为380.最终build的高度也增加了50为430. 增加了上面的高度以后,下面那个横线划掉的价格可以显示出来了. 但是 ...

  10. 15.oauth2 + oidc 实现 server部分

    OAuth主要做授权. OpenIdConnect简历在OAuth2.0基础之上的,相结合 客户端.授权中心.Resource Owner用户本身(资源的拥有者).Resource Server 通过 ...