AOP第一部分-基础



                                    使用ProxyFactoryBean实现AOP基础

使用ProxyFactoryBean实现AOP
一、业务分类
   主业务逻辑    OOP  biz
   横切业务逻辑  AOP  advice
二、实现步骤
  1、jar
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.3.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>4.3.9.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>4.3.9.RELEASE</version>
</dependency>
    <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
<dependency>
    <groupId>aopalliance</groupId>
    <artifactId>aopalliance</artifactId>
    <version>1.0</version>
</dependency>
2、定义一个接口
   package cn.com.bochy.istu;
import java.util.List;
import cn.com.bochy.entity.Stu;
public interface IStuBiz {
  public List<Stu> getAll();
  public boolean save(Stu s);
  public boolean update(Stu s);
  public boolean delete(Stu s);
  public Stu getStuByID(int id);
}
3、接口的实现类:主业务逻辑
package cn.com.bochy.istuImpl;
import java.util.List;
import cn.com.bochy.entity.Stu;
import cn.com.bochy.istu.IStuBiz;
public class StuBizImpl implements IStuBiz {
 @Override
 public List<Stu> getAll() {
System.out.println("getAll.....");
  return null;
 }
 @Override
 public boolean save(Stu s) {
 System.out.println("save a stu....");
  return false;
 }
 @Override
 public boolean update(Stu s) {
  System.out.println("update a stu....");
  return false;
 }
 @Override
 public boolean delete(Stu s) {
  System.out.println("delete a stu.....");
  return true;
 }
 @Override
 public Stu getStuByID(int id) {
  System.out.println("get a stu by id");
  return null;
 }
}
4、定义横切业务逻辑
   1、before advice
  package cn.com.bochy.advices;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
public class beforeAdvice implements MethodBeforeAdvice {
 @Override
 public void before(Method arg0, Object[] arg1, Object arg2)
   throws Throwable {
  System.out.println("before.....");
 }
}
2、around advice
  package cn.com.bochy.advices;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class aroundAdvice implements MethodInterceptor{
 @Override
 public Object invoke(MethodInvocation arg0) throws Throwable {
  System.out.println("around....");
  Object result=null;
   result=arg0.proceed();
  return result;
 }
}
3、after advice
package cn.com.bochy.advices;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
public class afterAdvice implements AfterReturningAdvice{
 @Override
 public void afterReturning(Object arg0, Method arg1, Object[] arg2,
   Object arg3) throws Throwable {
  System.out.println("after...."); 
 }
}
 
5、配置AOP:把横切业务逻辑织入横切业务逻辑

  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >
<beans>
   <bean id="stu" class="cn.com.bochy.entity.Stu"></bean>
   <bean id="stuBiz" class="cn.com.bochy.istuImpl.StuBizImpl"></bean>
   <bean  id="before" class="cn.com.bochy.advices.beforeAdvice"></bean>
   <bean  id="around" class="cn.com.bochy.advices.aroundAdvice"></bean>
   <bean  id="after" class="cn.com.bochy.advices.afterAdvice"></bean>
   <!-- 把横切业务逻辑织入横切业务逻辑 -->
   <bean id="aop" class="org.springframework.aop.framework.ProxyFactoryBean">
   <!-- 指定代理类和被代理类共同的接口 -->
     <property name="interfaces" value="cn.com.bochy.istu.IStuBiz"></property>
     <!-- 指定所有的拦截器(织入横切业务逻辑) -->
     <property name="interceptorNames">
     <list>
     <value>before</value>
     <value>around</value>
     <value>after</value>
     </list>
     </property>
      <!-- 指定横切业务逻辑在哪里执行 ,执行的目标 -->
      <property name="target" >
      <ref bean="stuBiz"/>
      </property>
   </bean>
</beans>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值