Spring AOP之Jruby

1.创建接口

package test.org.springframework.scripting;

/**
 * @author Rob Harrop
 */
public interface Messenger {

 String getMessage();

}

2.创建ruby实现[Messenger.rb]

require 'java'

include_class 'test.org.springframework.scripting.Messenger'

class RubyMessenger < Messenger

 def setMessage(message)
  @@message = message
 end

 def getMessage
  @@message+'ycl'
 end
end


3.定义切面

package test.org.springframework.scripting;

import org.aspectj.lang.ProceedingJoinPoint;

 
public final class MessengerScrambler {

 public String scramble(ProceedingJoinPoint pjp) throws Throwable {
  String message = (String) pjp.proceed();
  return new StringBuffer(message).reverse().toString();
 }

}

4.编写jruby-aop.xml

<?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:lang="http://www.springframework.org/schema/lang"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">

 <lang:jruby id="messenger"
    script-interfaces="test.org.springframework.scripting.Messenger"
    script-source="classpath:test/org/springframework/scripting/jruby/Messenger.rb">
  <lang:property name="message" value="Hello World!"/>
 </lang:jruby>

 <aop:config>
  <aop:pointcut id="messengerOps"
       expression="execution(String test.org.springframework.scripting.Messenger.*())"/>
  <aop:aspect id="scramblerAspect" ref="scrambler">
   <aop:around pointcut-ref="messengerOps"
         method="scramble"/>
  </aop:aspect>
 </aop:config>

 <bean id="scrambler" class="test.org.springframework.scripting.MessengerScrambler"/>

</beans>

 

5.编写测试类

public class JRubyScriptFactoryTests extends TestCase {

 

public static void main(String args[]) throws Exception{
  JRubyScriptFactoryTests ruby=new JRubyScriptFactoryTests();
  ruby.testAOP();
 }

 

public void testAOP() throws Exception {
  //采用Aop来实现ruby.

  ApplicationContext ctx = new ClassPathXmlApplicationContext("jruby-aop.xml", getClass());
  Messenger messenger = (Messenger) ctx.getBean("messenger");
  System.out.println(new StringBuffer("Hello World!").reverse().toString()+"==="+ messenger.getMessage());
 }

 

}

 可见Spring已经集成了Jruby的调用,只需要定义接口,实现可以用ruby进行定义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值