Spring自动代理

来源:互联网 发布:天威网络客服电话 编辑:程序博客网 时间:2024/05/18 02:38
接触Srping已经好长时间了,没有学精它,用到哪就看哪,不求甚解难以精通一项技术了,惭愧!项目中有个需求要在每个线程停止自动检查线程所使用资源,所以我想拦截interrupt方法就可实现,经测试没有成功,因为
Aop拦截的类必须统一实现一个接口,interrupt方法又是Thread自带的,项目中线程没有统一定义接口,所以失败但还是测试了一下Spring的自动代理,感觉还是挺好用的,在这个新技术新框架层出的年代,自己真的有点过时了,前一段时间听说Spring的创始人已经投奔微软了,我想对java还是会有一定影响的。

下面是测试代码,很简单自己记录一下,以备后用。

//业务类
package com.xujj.spring;
/**
 * IHelloWorld接口
 *
 * @author xujj
 */
public interface IHelloWorld {
    public abstract String test(String a);
}

package com.xujj.spring;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * IHelloWorld接口实现
 *
 * @author xujj
 */
public class HelloWorld implements IHelloWorld {
    private static final Log log = LogFactory.getLog(HelloWorld.class);
    public String test(String a) {
        log.info(a);
        return a;
    }
}


//通知,拦截方法
/**
 *
 */
package com.xujj.spring;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

/**
 * @author xujj
 *
 */
public class TestAdvice implements MethodInterceptor {

    public Object invoke(MethodInvocation arg0) throws Throwable {
        System.out.println("~~~~~~~~~~~~~~~~before~~~~~~~~~~~~");
        String value = String.valueOf(arg0.getArguments()[0]);
        if (value.startsWith("hello"))
            arg0.proceed();
        System.out.println("~~~~~~~~~~~~~~~after~~~~~~~");
        return null;
    }

}

//客户端:

package com.xujj.spring;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;


/**
 * HelloWorld客户应用
 *
 * @author xujj
 */
public class HelloClient {
    protected static final Log log = LogFactory.getLog(HelloClient.class);

    public static void main(String[] args) {
        ApplicationContext ctx=new FileSystemXmlApplicationContext("src/appcontext.xml");
       IHelloWorld hw = (IHelloWorld) ctx.getBean("hello");

//通过代理获取实例,只能转换成接口类型,不能转换成具体类
       hw.test("ahello world!!");
    }
}

//配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
   "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="advisor"
        class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice">
            <ref bean="TestAdvice" />
        </property>
        <property name="pattern">
            <value>.*test.*</value>
        </property>
    </bean>
    <bean id="TestAdvice" class="com.xujj.spring.TestAdvice"></bean>
    <bean id="autoProxyCreator"
        class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
    <bean id="hello" class="com.xujj.spring.HelloWorld" />

</beans>

阅读(766) | 评论(0) | 转发(0) |
0

上一篇:CORBA入门

下一篇:关联 聚合

相关热门文章
  • 上海黄浦区律师 即进行意思表...
  • Unity中的关节
  • 回收、收购!AGILENTN5181A N5...
  • 机不可失-SA2500A SA2500EX S...
  • 广州企业网站+手机网站建站能...
  • JDK1.6官方下载_JDK6官方下载_...
  • MyEclipse6.5下载及注册码...
  • Eclipse 插件安装、升级和卸载...
  • Eclipse+MyEclipse的配置
  • 最新版SWT Designer 6.0 安装,...
  • 如何学习linux内核
  • Linux分区扩容问题
  • linux系统机器,锁屏后,重新...
  • oracle vm 宕机不能自动漂移,...
  • 如何读取一个持续输出内容程序...
给主人留下些什么吧!~~
原创粉丝点击