SSH-框架工作笔记


    
    Spring 的 aop操作:
    
    aop 相当于以前的过滤器,有拦截的功能

      这里举个客人购买空调的例子。
    在用户购买之前,输出欢迎信息,在购买之后输出购买的空调信息;若果没有了这个商品,则跳转自定义错误。


1.定义购买之前的before方法;FrigBefore()
    public class FrigBefore {


    public  void before(JoinPoint jp) throws Throwable{
        String com=(String)jp.getArgs()[0];//获取在FrigBizImp里面定义的方法的第一个参数,客户的名称
        System.out.println("欢迎光临"+com);
    }
   }
2.定义商品不存在的错误NoThisFrig()
   public class NoThisFrig  extends Exception{
    private static final long serialVersionUID = 3259019719837934771L;
    public  NoThisFrig(String msg){
        super(msg);
    }
   }

3.定义购买方法并抛出自定义异常NoThisFrig

    public void buyFrig(String frig, String customer) throws NoThisFrig {
        if("美的".equals(frig)){
            throw new NoThisFrig("对不起没有"+frig+"的货了");
        }
        System.out.println("您已经成功购买一台"+frig);
    }
    
4.定义测试方法
    public class test {
    public static void main(String[] args) throws NoThisFrig {
        ApplicationContext app =
            new ClassPathXmlApplicationContext("applicationContext.xml");
      FrigBiz f=(FrigBiz) app.getBean("frigBizImp");    
        f.buyFrig("美的","李敏");
    }
   }

5.在applicationContext.xml页面里面配置文件
    <bean id="frigBizImp" class="com.zzzy.DaoImp.FrigBizImp"/>
    <bean id="frigBefore" class="com.zzzy.AOP.FrigBefore"/>
    <aop:config>
    <aop:pointcut id="p1" expression="execution(void buyFrig(String,String))"/>
    <aop:aspect id="logAspect" ref="frigBefore">
    <aop:before method="before" pointcut-ref="p1"/>
    </aop:aspect>
    </aop:config>
    
    
        <!-- 打印机 的配置   -->
    <bean id="color" class="com.zzzy.Entity.ColorInk"/>
    <bean id="gark" class="com.zzzy.Entity.GrayInk"/>
    <bean id="a3" class="com.zzzy.Entity.A3Page"/>
    <bean id="a4" class="com.zzzy.Entity.A4Page"/>
    <bean id="pointBefore" class="com.zzzy.AOP.PrintBefore"/>
    
    
    <bean id="printer" class="com.zzzy.DaoImp.Printer">
    <property name="ink" ref="color"/>
    <property name="page" ref="a3"/>
    </bean>
    
    <aop:config>
    <aop:pointcut id="p2" expression="execution(void printInfo())"/>
    <aop:aspect id="printAspect" ref="pointBefore">//这里一定要是pointBefore 而不是pointer
    //切面里面的ref--是before的类
    
    
    <aop:before method="before" pointcut-ref="p2"/>
    </aop:aspect>
    </aop:config>
    
    
    
    //使用注解方式配置切面
    1.启用注解配置  <aop:aspect-autoproxy/>
    
    2.配置目标业务对象
    <bean id="a" class="com.zzzy.DaoImp"></bean>
    3.配置切面
    <bean  class="com.zzzy.LogAspect"></bean>
    4.用注解配置切面的
    @Aspect
public class FrigAspect {
    
    //配置异常通知
    @AfterThrowing(pointcut="execution(void buyFrig(String,String))",throwing="e")
    public void afterThrowing(NoThisFrig e)throws Throwable{
        
        System.out.println("通知仓库,赶紧订货!");
        
    }
}

5.在业务方法的类中注解配置
@Repository
public class FrigBizImp  implements FrigBiz{

    public void buyFrig(String frig, String customer) throws NoThisFrig {
        if("美的".equals(frig)){
            throw new NoThisFrig("对不起没有"+frig+"的货了");
        }
        System.out.println("您已经成功购买一台"+frig);
    }
}

 

posted @ 2015-01-23 22:15  慕容哲别-  阅读(124)  评论(0编辑  收藏  举报