Support setter/getter with protected visibility scope for LiveObject #655

pull/660/head
Nikita 9 years ago
parent e5e3ec18ea
commit 513db6bea4

@ -677,12 +677,14 @@ public class RedissonLiveObjectService implements RLiveObjectService {
.or(ElementMatchers.isDeclaredBy(RExpirableAsync.class)))
.intercept(MethodDelegation.to(RExpirableInterceptor.class))
.implement(RExpirable.class)
.method(ElementMatchers.isDeclaredBy(Map.class)
.or(ElementMatchers.isDeclaredBy(ConcurrentMap.class))
.or(ElementMatchers.isDeclaredBy(RMapAsync.class))
.or(ElementMatchers.isDeclaredBy(RMap.class)))
.intercept(MethodDelegation.to(RMapInterceptor.class))
.implement(RMap.class)
.method(ElementMatchers.not(ElementMatchers.isDeclaredBy(Object.class))
.and(ElementMatchers.not(ElementMatchers.isDeclaredBy(RLiveObject.class)))
.and(ElementMatchers.not(ElementMatchers.isDeclaredBy(RExpirable.class)))
@ -693,9 +695,10 @@ public class RedissonLiveObjectService implements RLiveObjectService {
.and(ElementMatchers.not(ElementMatchers.isDeclaredBy(Map.class)))
.and(ElementMatchers.isGetter()
.or(ElementMatchers.isSetter()))
.and(ElementMatchers.isPublic()))
.and(ElementMatchers.isPublic().or(ElementMatchers.isProtected())))
.intercept(MethodDelegation.to(
new AccessorInterceptor(redisson, objectBuilder)))
.make().load(getClass().getClassLoader(),
ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();

@ -1291,6 +1291,49 @@ public class RedissonLiveObjectServiceTest extends BaseTest {
}
}
@REntity
public static class SetterEncapsulation {
@RId(generator = LongGenerator.class)
private Long id;
private Map<String, Integer> map;
public SetterEncapsulation() {
}
public Long getId() {
return id;
}
public Integer getItem(String name) {
return getMap().get(name);
}
public void addItem(String name, Integer amount) {
getMap().put(name, amount);
}
protected Map<String, Integer> getMap() {
return map;
}
}
@Test
public void testSetterEncapsulation() {
SetterEncapsulation se = new SetterEncapsulation();
se = redisson.getLiveObjectService().persist(se);
se.addItem("1", 1);
se.addItem("2", 2);
se = redisson.getLiveObjectService().get(SetterEncapsulation.class, se.getId());
assertThat(se.getItem("1")).isEqualTo(1);
assertThat(se.getItem("2")).isEqualTo(2);
}
@Test(expected = IllegalArgumentException.class)
public void testObjectShouldNotBeAttached() {

Loading…
Cancel
Save