2013-04-01 16 views
15

Ofisimde ilkbaharda yeniyim. Yani benim için bir rehber yok.AOP ile ilkbaharda oturum açıyor musunuz?

AOP ile günlük kaydını log4j kullanarak gerçekleştirmem gerekiyor.

AOP olmadan günlüğe kaydetmeyi temel spring MVC örneğiyle uyguladınız mı?

Ayrıca küçük örnek aspectJ kullanarak AOP oturum açmadan (sadece Sysout yapıldı)?

Nasıl entegre edeceğimi bilmiyorum?

Herhangi biri bana bir başlangıç ​​fikrini verebilir mi?

İyi cevaplar kesinlikle bize AOP'nin yararlanmak için

+0

Yan nota: İngilizce'de, "yok" tek kelimedir. Umarım iyi bir cevap alırsın. –

+0

Aspect eğitimi: http://marcin-chwedczuk.github.io/overview-of-spring-annotation-driven-aop – csharpfolk

cevap

31

Bahar çok kolaylaştırır ... takdir edilmektedir. İşte basit günlük örnek:

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

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

Sen Birazdan yöntemle yukarıda @After belirtilen MyLogger sınıfında fark edeceksiniz:

@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..."); 
    } 
} 

Sonra basitçe applicationContext.xml (veya eşdeğeri) yapılandırın. Buna öneri denir ve temel olarak bu 'log' yönteminin, söz konusu yöntemden sonra olarak adlandırılacağını belirtir. Diğer seçenekler @Before, @Around, @AfterThrowing içerir.

"execution(* com.example.web.HomeController.*(..))" ifadesi bir pointcut ifadesi olarak adlandırılır ve hedeflediğimizi belirtir (bu durumda HomeController sınıfının tüm yöntemleri).

P.S. aop ad boşluğuna (xmlns:aop="http://www.springframework.org/schema/aop") ve şema yerinin (sürümüne bağlı) uygulamanızın en sağdaki applicationContext.xml dosyasına eklenmesi gerekir. Sen AspectJ entegre etmek birkaç adımları gerçekleştirmek için ihtiyaç

<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

Ayrıca, MyLogger sınıfına '@ Component 'ile not eklemeniz gerekmiyor mu? Ayrıca yoksa, applicationContext.xml dosyanızdaki 'component-scan 'öğesine de ihtiyacınız var. –

+1

@Component ek açıklaması (diğerlerinin yanı sıra) Spring'e, söz konusu sınıfın konteynırda yönetilmesi gerektiğini (diğer bir deyişle bir Spring bean) kullanmaktadır. Uygulama içeriğinizde MyLogger sınıfı gibi bir fasülye belirttiğinizde, ilk önce sınıfın yönetilmesi için Bahar'a etkili olduğunu söylüyorsunuz (bu nedenle ek açıklamaya gerek yoktur), bu da sınıfları üçüncü taraf kitaplıklarından konteynere koymanızı sağlar. –

+2

[Belgeler] 'den (http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html): 'Yayda, fasulyeleri normal fasulye olarak kaydedebilirsiniz. XML konfigürasyonunu yapın veya otomatik olarak algılamayı sınıf yolu taraması yapın - diğer tüm Spring-yönetimli fasülyeler gibi. Ancak, @Aspect ek açıklamasının, sınıf yolunda otomatik algılama için yeterli olmadığını unutmayın: Bu amaçla, ayrı bir @Component ek açıklaması eklemeniz gerekir (ya da alternatif olarak, Spring'in bileşen tarayıcısının kurallarına göre uygun olan özel bir stereotip notu). –

0

,

  1. AspectJ yükleyin http://www.cs.utep.edu/cheon/cs3360/project/proj1/installing-aspectj.txt
  2. META-INF \ aop.xml için aop.xml ekleyin: İşte benim kurulduğundan Projeniz
  3. -javaagent ekle proje sınıf yolunda aspectjrt-xx0.jar ve aspectjweaver-xx0.jar ekleyin: AspectJ yükleme/aspectjweaver-1.7.0.j için/yol sunucunuzun JVM'sini 'a gönderin. İşte

,

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

Zaten bahar kullanıyorsanız o zaman, burada iyi bir örnektir Ayarlarınızı basitleştirmek için bahar kullanmak daha iyidir, örnek bir aop.xml olan http://forum.springsource.org/showthread.php?61551-Bean-Factory-is-not-set-for-BeanConfigurerSupport

İlgili konular