2013-04-01 5 views
15

Я новичок в весне в своем офисе. Поэтому для меня нет никакого руководства.каротаж с АОП весной?

Мне нужно выполнить каротаж с помощью AOP, используя log4j.

Я внедрил регистрацию без AOP в основном spring MVC пример?

Также сделал небольшой образец в AOP с использованием aspectJ без регистрации (только что сделал Sysout)?

Я не знаю, как его интегрировать?

Может ли кто-нибудь, пожалуйста, дать мне идею запуска?

Хорошие ответы, безусловно, оценили ...

+0

Сторона примечания: на английском языке слово «без» - одно слово. Надеюсь, вы получите хороший ответ. –

+0

Аспект: http://marcin-chwedczuk.github.io/overview-of-spring-annotation-driven-aop – csharpfolk

ответ

31

Spring делает его очень легким для нас, чтобы использовать АОП. Вот простой пример регистрации:

@Aspect 
public class MyLogger { 

    private Logger log = Logger.getLogger(getClass()); 

    @After("execution(* com.example.web.HomeController.*(..))") 
    public void log(JoinPoint point) { 
     log.info(point.getSignature().getName() + " called..."); 
    } 
} 

Затем просто настроить applicationContext.xml (или эквивалент):

<aop:aspectj-autoproxy> 
     <aop:include name="myLogger"/> 
    </aop:aspectj-autoproxy> 

    <bean id="myLogger" class="com.example.aspect.MyLogger"/> 

Вы заметите в классе MyLogger, что я указал @After прямо над методом. Это называется советом, и в основном это указывает на то, что этот метод «журнала» будет называться после рассматриваемого метода. Другие варианты включают @Before, @Around, @AfterThrowing.

Выражение "execution(* com.example.web.HomeController.*(..))" называется выражением pointcut и указывает, на что мы нацеливаемся (в данном случае все методы класса HomeController).

P.S. Пространство имен aop (xmlns:aop="http://www.springframework.org/schema/aop") и расположение схемы (зависит от версии) должны быть добавлены в ваш applicationContext.xml справа вверху. Вот мои настройки:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> 
+0

Вам также не нужно комментировать класс MyLogger с помощью '@ Component'? Вам также нужен элемент 'component-scan' в вашем applicationContext.xml, если вы этого еще не сделали. –

+1

Аннотации @Component используются (среди прочих), чтобы сообщить Spring, что рассматриваемый класс должен управляться в контейнере (то есть в компоненте Spring). Когда вы указываете bean-компонент в вашем контексте приложения, например MyLogger, тогда вы эффективно сообщаете Spring о том, как управлять классом (при этом аннотация не нужна), что позволяет помещать классы в контейнер из сторонних библиотек. –

+2

Из [документации] (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html): 'Вы можете регистрировать классы аспектов как обычные бобы в своей весне XML-конфигурацию или автоматическое определение их самого сканирования в пути - точно так же, как и любой другой управляемый Spring. Однако обратите внимание, что аннотации @Aspect недостаточно для автоопределения в пути к классам. Для этой цели вам нужно добавить отдельную аннотацию @Component (или, альтернативно, пользовательскую аннотацию стереотипа, которая квалифицируется в соответствии с правилами весеннего компонента-сканера). ' –

0

Вам необходимо выполнить несколько шагов по интеграции AspectJ,

  1. Установка AspectJ, http://www.cs.utep.edu/cheon/cs3360/project/proj1/installing-aspectj.txt
  2. Добавить aop.xml в META-INF \ aop.xml в ваш проект
  3. Добавить aspectjrt-xx0.jar и aspectjweaver-xx0.jar в свой путь к проекту
  4. Добавить -javaagent:/path to aspectj installation/aspectjweaver-1.7.0.j ar до вашего JVM вашего сервера.

Вот пример aop.xml,

<aspectj> 
<aspects> 
    <aspect name="test.MySimpleLoggerAspect" /> 
</aspects> 
<weaver> 
    <include within="test.myproject.*" /> 
</weaver>  
</aspectj> 

, если вы уже используете весной, то лучше использовать Spring для упрощения настройки, здесь хороший пример, http://forum.springsource.org/showthread.php?61551-Bean-Factory-is-not-set-for-BeanConfigurerSupport