spring中的aop操作

        aop的全称是Aspect Oriented Programming,也就是说在spring中你得使用AspectJ来完成aop操作,aop是一种面向切面的变成思想,换句话说就是为了再不改变原方法的情况下来扩展这个方法。比如下面的add方法,我们想在add方法执行后添加一个日志功能来记录一下add执行的时间。使用extends来扩展的话存在耦合,也就是说当父类中的方法名称发生变化时,你还得去找哪个extend了这个父类,去每一个子类中去修改方法名字,呵呵,如果项目很庞大的话,你懂得。所以得用aop操作来改善这个耦合的问题。

下面十几个aop的操作术语,这是其中几个比较重要的。

这几个点是不是很简单,以前没好好学习,总感觉很难。其实还好,只是以前心思不在学习上。现在上班了没办法。相信自己,加油。

使用表达式配置切入点。你想扩展哪个方法就对该方法进行一个配置,也就是说你得告诉程序你要扩展哪个方法,这个方法叫什么,在哪。第一个*表示方法修饰符是public、private无所谓都行的意思。后面的就是方法的全路径。(..)表示该方法有没有参数参数有多少个都行。第三个经常不用,无视就行。第四个也认识一下就行。

下面是第一种基于aspectj的xml配置方法来实现方法的增强,也就是实现aop操作。

第一步导入所需要的jar包,下面是我的目录,以及导入的jar包,将炸包复制到lib下然后在lib文件夹上右键refresh就好啦。

因为等会要测试方法,所以再来一步导入JUnit,Eclipse下引入junit的两种方法

方法一:

右击选中的project-》build path-》add libraries-》选中junit,next直到finish

方法二:

1、由http://sourceforge.net/projects/junit/?source=navbar
或者http://www.junit.org (重定向到Github)下载junit的jar包,保存在本地磁盘

2、在Eclipse当中右击选中的project-》build path-》add external Archieves-》找到前面下载的junit jar包引入即可

下面是每个文件里的代码

Book.java

package cn.spring.aop;

public class Book {
   public void add(){
	   System.out.println("add...");
   }
}

MyBook.java

package cn.spring.aop;

public class MyBook {
  public void before1(){
	  System.out.println("前置增强。。。");
  }
}

test.java

package cn.spring.aop;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
	@Test
    public void testaop(){
    	ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
    	Book book=(Book) context.getBean("book");
    	book.add();
    	
    }
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd    
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 
    <!--1 配置对象 -->
    <bean id="book" class="cn.spring.aop.Book"></bean>
    <bean id="myBook" class="cn.spring.aop.MyBook"></bean>
    
    <!-- 2 配置aop操作 -->
    <aop:config>
       <!-- 2.1配置切入点 -->
       <aop:pointcut expression="execution(* cn.spring.aop.Book.add(..))" id="pointcut1"/>
       
       <!-- 2.2配置切面 
                                  把增强用到方法上面
       -->
       <aop:aspect ref="myBook">
          <!-- 配置增强的类型,前置还是后置等 
          method,增强类中使用哪个方法作为前置增强
          pointcut-ref:指定方法要用在哪个切入点上面
          -->
          <aop:before method="before1" pointcut-ref="pointcut1"/>       
       </aop:aspect>
    </aop:config>
</beans>    

在testaop上右键run as>>JUnit Test。

运行结果

以上就是用配置方法来完成的aop的步骤。当然注解的方法会更方便一点需要做的就是约束要引入context,也就是在bean配置文件中加上以下约束,这个知道就行啦。

 xmlns:context="http://www.springframework.org/schema/context"

 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd

接着往下看吧,嘿嘿。对了如果你不想看到运行结果里的关于log4j的警告,就按照以下步骤将log4j.properties复制粘贴到他该呆的地方就不会有警告啦。

运行结果如下

 

下面是基于aspectj的注解aop,也就是配置方法的升级版,不用写那么多的配置内容了。

国际惯例,导入炸包,目录如下

Book.java

package cn.spring.aopAnno;

public class Book {
  public void add(){
	  System.out.println("add...");
  }
}

MyBook.java

package cn.spring.aopAnno;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class MyBook {
	//在方法上面使用注解完成增强的配置,用这个注解方式来配置一下,
	//这个before1方法要对哪个类的哪个方法来进行增强,用的是一种表达式的形式来告诉程序
	@Before(value="execution(* cn.spring.aopAnno.Book.add(..))")
   public void before1(){
	   System.out.println("before...");
   }
}

test.java

package cn.spring.aopAnno;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {
	@Test
    public void testaop(){
    	ApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");
    	Book book=(Book)context.getBean("book");
    	book.add();
    	
    }
}

bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd    
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
    <!--1 配置对象 -->
    <bean id="book" class="cn.spring.aopAnno.Book"></bean>
    <bean id="myBook" class="cn.spring.aopAnno.MyBook"></bean>
   
 
</beans>    

<!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> -->

运行结果:

如果运行不出来,那肯定是和我输入的不一样,注意一些括号之类的输入。

比如:@Before(value="execution(* cn.spring.aopAnno.Book.add(..))")括号就挺多的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值