2013-02-08 8 views

Antwort

2

Wenn Sie keinen Container irgendeiner Art verwenden, wird keine Implementierung der Java EE Interceptor-API für Ihre Anwendung verfügbar sein.

Sie sollten stattdessen eine AOP-Lösung wie AspectJ verwenden, für die eine große Menge an Tutorials und Beispielen online verfügbar ist. Ich würde jedoch vorsichtig sein, zu versuchen, an Beispielen festzuhalten, die den neuesten Versionen und Best Practices folgen, da es viele alte Sachen gibt.

Wenn Sie bereits das Spring-Framework verwenden, erfüllt Spring AOP möglicherweise Ihre Anforderungen. Dies wird wesentlich einfacher in Ihre Anwendung zu integrieren sein, obwohl Sie nicht alle Funktionen von AspectJ erhalten.

5

Sie können CDI in Java SE verwenden, Sie müssen jedoch eine eigene Implementierung bereitstellen. Hier ist ein Beispiel der Referenzimplementierung mit - Weld:

package foo; 
import org.jboss.weld.environment.se.Weld; 

public class Demo { 
    public static class Foo { 
    @Guarded public String invoke() { 
     return "Hello, World!"; 
    } 
    } 

    public static void main(String[] args) { 
    Weld weld = new Weld(); 
    Foo foo = weld.initialize() 
     .instance() 
     .select(Foo.class) 
     .get(); 
    System.out.println(foo.invoke()); 
    weld.shutdown(); 
    } 
} 

Die einzige Ergänzung zum Classpath ist:

<dependency> 
    <groupId>org.jboss.weld.se</groupId> 
    <artifactId>weld-se</artifactId> 
    <version>1.1.10.Final</version> 
</dependency> 

Die Anmerkung:

package foo; 
import java.lang.annotation.*; 
import javax.interceptor.InterceptorBinding; 

@Inherited @InterceptorBinding 
@Retention(RetentionPolicy.RUNTIME) 
@Target({ ElementType.METHOD, ElementType.TYPE }) 
public @interface Guarded {} 

Interceptor Umsetzung:

package foo; 
import javax.interceptor.*; 

@Guarded @Interceptor 
public class Guard { 
    @AroundInvoke 
    public Object intercept(InvocationContext invocationContext) throws Exception { 
    return "intercepted"; 
    } 
} 

Deskriptor:

<!-- META-INF/beans.xml --> 
<beans xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
           http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
    <interceptors> 
     <class>foo.Guard</class> 
    </interceptors> 
</beans>