0
Мне нужна помощь в создании АОП. Что мне здесь не хватает?My Spring AOP не работает
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="duke" class="com.tutorial.springidol.Singer">
<constructor-arg value="Duke"/>
<constructor-arg>
<bean class="com.tutorial.springidol.Song">
<property name="title" value="ABC"/>
</bean>
</constructor-arg>
</bean>
<bean id="audienceAdvice" class="com.tutorial.advice.AudienceAdvice">
<property name="audience">
<bean class="com.tutorial.springidol.Audience"/>
</property>
</bean>
<bean id="audienceAdvisor"
class="org.springframework.
aop.support.RegexpMethodPointcutAdvisor">
<property name="advice" ref="audienceAdvice"/>
<property name="pattern" value=".*perform"/>
</bean>
</beans>
AudienceAdvice.java
public class AudienceAdvice implements MethodBeforeAdvice,
AfterReturningAdvice {
@Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
audience.takeSeats();
audience.turnOffCellphones();
}
@Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
audience.applaud();
}
private Audience audience;
public void setAudience(Audience audience) {
this.audience = audience;
}
}
АОП не работает, но цель выполняется, хотя.
(Я должен также сказать, что это нечетный боб в том, что вам не нужно искать его или провод его в любой другой боб при запуске контейнер, фасоль загорается и добавляет рекомендации ко всем соответствующим именам бобов). Просто добавьте это в свой XML и до тех пор, пока вы обращаетесь к своему компоненту в том, как описывает инструментарий, он должен работать. –
Это сработало! Но все это время я думал, что советник аудитории использовал этот совет, поскольку он имел совет (свойство совета), и он знал, когда его применять (свойство шаблона). – Jeune
Свойство pattern в Advisor описывает методы, к которым применяются, а не к компонентам, к которым нужно применить. Я считаю, что это сбивает с толку - я настоятельно рекомендую вам исследовать пространство имен aop: namespace, это позволяет настраивать более интуитивно понятным способом. Кроме того, посмотрите на синтаксис AspectJ Pointcut. Обе темы описаны в справочном руководстве. –