有人有Spring AOP@DeclarePParents的例子吗



几天来,我一直在努力让它发挥作用,但失败得很惨。我似乎无法将我的类正确转换为Introducted接口。我使用的是Spring 3.0.5。

有人有使用@DeclarePrents的项目的完整工作示例吗?还是XML等价物?我在网上发现了一堆片段,但也没有成功地让它们发挥作用。

这是我第一次尝试介绍,但我很难做到这一点。我已经阅读了Spring文档、AspectJ文档以及论坛,但仍然无法使其发挥作用。我认为创建类/接口是正确的,但当我尝试将Advised对象强制转换为接口时,我会出现强制转换错误。

目标:

@实体@表(name="item"(公共类Item实现java.io.Serializable{私有长id;private Integer mainType;private Integer子类型;private字符串brandName;private字符串itemName;private发布日期;private日期退休日期;private字符串fileName;private字符串thumbnailName;private字符串维度;私有布尔活动;私有布尔解锁;private Integer unlockCost;私有布尔型;公共项(({}。。。//一群胡作非为的人。。。}

接口:

公共接口AbstractBaseEntity{/***@返回customAttributes*/public Object getCustomAttribute(字符串名称(;/***@param customAttributes要设置的customAttributes*/public void setCustomAttribute(字符串名称,Object值(;}

实施:

公共类AbstractBaseEntityImpl实现AbstractBaseEntity{/***可以为特定实体映射的自定义属性的映射*/@瞬态protected Map customAttributes=new ConcurrentHashMap((;/***@返回customAttributes*/public对象getCustomAttribute(字符串名称({return customAttributes.get(name(;}/***@param customAttributes要设置的customAttributes*/public void setCustomAttribute(字符串名称,对象值({this.customAttributes.put(名称,值(;}}

方面:

@DeclareParents(value="com.fwl.domain.model.*+",defaultImpl=AbstractBaseEntityImpl.class(public AbstractBaseEntity mixin;

然而,当我将引入的对象作为object参数传递给一个方法,检查它是否是AbstractBaseEntity的实例时,它返回false。

public void localize(对象实体,区域设置区域设置({列出cachedFields;if(实体==空(//什么都不做回来//检查实体是否已本地化if(AbstractBaseEntity的实体实例(//已本地化,无需执行任何操作回来。。。。。。}

是否有任何方法可以确保正确地进行介绍?无论如何,要确定为什么我不能将其转换为AbstractBaseEntity?

如有任何帮助,我们将不胜感激。

谢谢,

Eric

我有一个工作示例,但我知道这个问题很老
基本接口:

package pl.beans;
public interface Performance {
    public void perform();
}

性能的实现:

package pl.beans;
import java.util.Random;
import org.springframework.stereotype.Component;
@Component
public class Actor implements Performance {
private static final String WHO = "Actor: ";
@Override
public void perform() {
    System.out.println(WHO+"Making some strange things on scene");
    int result = new Random().nextInt(5);
    if(result == 0) {
        throw new IllegalArgumentException(WHO+"Actor falsified");
    }
}

}

新接口:

package pl.introduction;
public interface Crazy {
    public void doSomeCrazyThings();
}

新接口的实现:

package pl.introduction;
public class CrazyActor implements  Crazy {
@Override
public void doSomeCrazyThings() {
    System.out.println("Ługabuga oooo  'Performer goes crazy!'");
    }
}

方面:

package pl.introduction;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclareParents;
@Aspect
public class CrazyIntroducer {
    @DeclareParents(value="pl.beans.Performance+", defaultImpl=pl.introduction.CrazyActor.class)
    public static Crazy shoutable;
}

JavaConfig:

package pl.introduction;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import pl.beans.Actor;
import pl.beans.Performance;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class Config {
    @Bean
    public CrazyIntroducer introducer () {
        return new CrazyIntroducer();
    }
    @Bean
    public Performance performance() {
        return new Actor();
    }
}

并测试表明,介绍工作:

package pl.introduction;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import pl.beans.Performance;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = pl.introduction.Config.class)
public class IntroductionTest {
@Autowired
private Performance performance;
@Test
public void shoutTest() {
    try {
        performance.perform();
    } catch (IllegalArgumentException e) {
        System.out.println(e);
    }
    assertTrue(performance instanceof Crazy);
    ((Crazy) performance).doSomeCrazyThings();
    }
}

相关内容

  • 没有找到相关文章

最新更新