1

作成した動的プロキシを、アプリケーションの一部であるすべてのクラスに適用したいと考えています。しかし、 MyDynamicProxy.newInstance(new Account()); のようなものを書く代わりに、依存性注入 (Spring) を使用できるようにしたいです。

newInstance の場所:

public static Object newInstance(Object object) {             
return Proxy.newProxyInstance(object.getClass().getClassLoader(),object.getClass().getInterfaces(),new LoggingProxy(object));        
}  

アプリケーション内のすべてのクラスに依存性注入と動的プロキシを適用するにはどうすればよいですか?

4

2 に答える 2

1

org.springframework.beans.factory.config.BeanPostProcessor.postProcessAfterInitialization(Object, String)元のBeanの代わりに、プロキシインスタンスを使用して返すことを試みることができます。

注意:ログを記録するだけの場合は、SpringのAOPサポートを使用して調査する方が簡単な場合があります。これにより、すべてのSpring管理対象Beanに単純なロギングアスペクトを定義できます。

于 2011-05-04T09:07:31.787 に答える
1

プロキシを手動で作成しないでください。Spring AOPを使用して Logging Proxy を作成してください。

簡単なアスペクトを作成します。

@Aspect
public class LoggingAspect{

    private static final Logger log = Logger.getLogger(LoggingAspect.class);

    @Pointcut("execution(* *.*(..))")
    public void methodExecution(){
    }

    @Before("methodExecution()")
    public void logBeforeMethod(final JoinPoint joinPoint){
        log.trace("Entering method " + joinPoint.getSignature() + " with args "
            + Arrays.toString(joinPoint.getArgs()));
    }

}

次に、Spring でアスペクトを配線します。

<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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">


    <bean class="aspects.LoggingAspect" />
    <aop:aspectj-autoproxy />

</beans>

これで、すべての Spring Bean がプロキシになり、それらのすべてのメソッド実行 (少なくともインターフェースによってサポートされているもの) がログに記録されます。

ところで:アスペクトのトレースは 、Ramnivas Laddad によるAspectJ in Action無料の第 10 章で説明されています。

于 2011-05-04T09:14:43.853 に答える