您的位置:首页 > 编程语言 > ASP

SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-009-带参数的ADVICE2

2016-03-03 21:02 761 查看
一、

情景:有个魔术师会读心术,常人一想一事物他就能读到。以魔术师为切面织入常人的内心。

二、

1.

// <start id="mindreader_java" />
package com.springinaction.springidol;

public interface MindReader {
void interceptThoughts(String thoughts);

String getThoughts();
}
// <end id="mindreader_java" />


2.

// <start id="magician_java" />
package com.springinaction.springidol;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class Magician implements MindReader {
private String thoughts;

@Pointcut("execution(* com.springinaction.springidol." //<co id="co_parameterizedPointcut"/>
+ "Thinker.thinkOfSomething(String)) && args(thoughts)")
public void thinking(String thoughts) {
}

@Before("thinking(thoughts)") //<co id="co_passInParameters"/>
public void interceptThoughts(String thoughts) {
System.out.println("Intercepting volunteer's thoughts : " + thoughts);
this.thoughts = thoughts;
}

public String getThoughts() {
return thoughts;
}
}
// <end id="magician_java" />


3.

// <start id="thinker_java" />
package com.springinaction.springidol;

public interface Thinker {
void thinkOfSomething(String thoughts);
}
// <end id="thinker_java" />


4.

// <start id="volunteer_java" />
package com.springinaction.springidol;

public class Volunteer implements Thinker {
private String thoughts;

public void thinkOfSomething(String thoughts) {
this.thoughts = thoughts;
}

public String getThoughts() {
return thoughts;
}
}
// <end id="volunteer_java" />


5.sneaky-magician.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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> 
<bean id="volunteer"
class="com.springinaction.springidol.Volunteer" />
<bean id="magician"
class="com.springinaction.springidol.Magician" />

<!-- <start id="aspectj_autoproxy" /> -->
<aop:aspectj-autoproxy />
<!-- <end id="aspectj_autoproxy" /> -->

</beans>


6.

package com.springinaction.springidol;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration( { "sneaky-magician.xml" })
public class MindReaderTest {
@Autowired
MindReader magician;

@Autowired
Thinker volunteer;

// <start id="testMindReader" />
@Test
public void magicianShouldReadVolunteersMind() {
volunteer.thinkOfSomething("Queen of Hearts");

assertEquals("Queen of Hearts", magician.getThoughts());
}
// <end id="testMindReader" />
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐