package io.muoncore.spring.repository;
import io.muoncore.Muon;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.util.StringValueResolver;
import java.lang.reflect.Proxy;
public class MuonRepositoryFactoryBean implements FactoryBean<Object>, EmbeddedValueResolverAware {
private Class<?> type;
@Autowired
private Muon muon;
private StringValueResolver valueResolver;
@Override
public Object getObject() throws Exception {
MuonRepositoryInvocationHandler invocationHandler = new MuonRepositoryInvocationHandler(this.type, muon, valueResolver);
return Proxy
.newProxyInstance(type.getClassLoader(), new Class<?>[]{type}, invocationHandler);
}
@Override
public Class<?> getObjectType() {
return this.type;
}
@Override
public boolean isSingleton() {
return true;
}
public void setType(Class<?> type) {
this.type = type;
}
@Override
public void setEmbeddedValueResolver(StringValueResolver resolver) {
this.valueResolver = resolver;
}
}