zoukankan      html  css  js  c++  java
  • 简单的Spring1.0小配置

      开始Spring AOP的小理解

       拿一个小例子来说吧!    老师上课   这样的例子!    老师上课--就是一个核心的业务!     那么上课之前需要点名,天气太热,需要开空调!

    这个时候,一个老师太多事就做不来了(不是做不来,我一个老师来教书,又不是来打杂的,我讲我的课  其他的我不管)!   

       那么问题就出现了,这个杂碎的事情谁去做呢!  好的,这个时候,应该有另一个老师或者学生负责点名,另一个人负责开关空调什么的! 老师就可以做到只讲课了!

    这样,放到小例子来就是,我想要执行一个核心的业务,其他事情就交给拦截器来做吧!   在我的核心业务执行之前或者之后都可能会有相应的拦截器去做其他的事了!

    public class DianMingAdvice implements MethodBeforeAdvice
    {
    
        /**
         * 点名类,增强
         * 
         * 
         * 第一个参数是方法名,第二个参数是第一个参数方法的参数,第三个是代理对象
         */
        @Override
        public void before(Method method, Object[] arg1, Object target)
                throws Throwable
        {
           System.out.println("开始点名!!!");
           System.out.println("调用的方法名:"+method.getName());
        }
    
    }

    我首先定义了一个老师专门在讲师讲课之前就执行的拦截器,等我的拦截器执行后,我再执行我的核心业务(讲课)

    public class Teacher
    {
        public void teach(String teachName,String course)
        {
            System.out.println(teachName+"老师开始上课:  "+course);
        }
    }

    我的Spring XML的配置文件是这样的(Spring1.0)

    <?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:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
    
     
       
       
       <!-- 点名的老师类 -->
       <bean id="lin" class="com.advice.DianMingAdvice" />
        
        <!-- 开空调的类 -->
        <bean id="wang" class="com.advice.OpenAdvice" />   
        
        <!-- 关空调的类 -->
        <bean id="zhang" class="com.advice.CloseAirconditionAdvice" />
        
        <!-- 核心业务对象,教师类 -->
        <bean id="peng" class="com.test.Teacher" />
        
        <!-- 利用Spring提供的代理对象,组装2对象,,target是一个代理   ref="peng"  是引用了这个类 -->
        <bean id="pengProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="target" ref="peng"></property>
            
            <!-- 定义了所有要拦截核心业务的方法对象advice -->
            <property name="interceptorNames">
            
            <!-- 具有顺序,因为XxxAdvice类所实现的接口的拦截顺序具有先后!XxxAdvice类所实现的接口相同那么就应该根据下列List中的顺序执行拦截 -->
               <list>
                  <value>lin</value>
                  <value>wang</value>
                  <value>zhang</value>
               </list>
            </property>
        </bean>
        
    </beans>

    以上的工作都做好以后!  测试一下

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TeacherTest
    {
    
        public static void main(String[] args)
        {
              ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
              Teacher tc=(Teacher)context.getBean("pengProxy");
              tc.teach("admin", "java");
        }
    
    }

    结果....开关空调的类没有放上来,跟点名的老师的类是一样的!    只是关闭空调的类的实现接口为AfterReturningAdvic--这是在下课后或者下课某一阶段(切点)执行的

    log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    开始点名!!!
    调用的方法名:teach
    开空调!
    admin老师开始上课:  java
    上完课后关空调!!!

    不对之处,还望大牛指正

  • 相关阅读:
    合同主体列表添加两条合同主体,返回合并支付页面,支付总弹"请选择合同主体",删除后,竟然还能支付(改合并支付页面的字段状态)
    (TODO:)下载图片,报错:warning: could not load any Objective-C class information from the dyld shared cache. This will significantly reduce the quality of type information available.
    GCD死锁 多线程
    iOS知识总结
    快速排序,冒泡排序,选择排序
    fight
    3D Touch
    Xcode 调试技巧
    右滑退出手势及隐藏导航栏存在的风险
    C语言-第5课
  • 原文地址:https://www.cnblogs.com/yccmelody/p/5440928.html
Copyright © 2011-2022 走看看