简单的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
上完课后关空调!!!

 

 

不对之处,还望大牛指正

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值