Il mio server non ha i contenitori Spring AOP e non posso aggiungerli. La versione Spring è 2.0.6.Come posso creare un proxy senza usare la molla AOP
Desidero utilizzare il proxy per 5 dei miei servizi.
Qual è il modo migliore per farlo
Il mio server non ha i contenitori Spring AOP e non posso aggiungerli. La versione Spring è 2.0.6.Come posso creare un proxy senza usare la molla AOP
Desidero utilizzare il proxy per 5 dei miei servizi.
Qual è il modo migliore per farlo
Un esempio usando un bean Spring post-processore per proxy ogni fagiolo:
public class ProxifyingPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(final Object bean, String beanName) throws BeansException {
Class beanClass = bean.getClass();
if (Proxy.isProxyClass(beanClass)) {
return bean;
}
List<Class<?>> interfaceList = getAllInterfaces(beanClass);
Class[] interfaces = (interfaceList.toArray(new Class[interfaceList.size()]));
return Proxy.newProxyInstance(beanClass.getClassLoader(), interfaces, new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
return method.invoke(bean, objects);
}
});
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
private List<Class<?>> getAllInterfaces(Class<?> cls) {
if (cls == null) {
return null;
}
LinkedHashSet<Class<?>> interfacesFound = new LinkedHashSet<Class<?>>();
getAllInterfaces(cls, interfacesFound);
return new ArrayList<Class<?>>(interfacesFound);
}
private void getAllInterfaces(Class<?> cls, HashSet<Class<?>> interfacesFound) {
while (cls != null) {
Class<?>[] interfaces = cls.getInterfaces();
for (Class<?> i : interfaces) {
if (interfacesFound.add(i)) {
getAllInterfaces(i, interfacesFound);
}
}
cls = cls.getSuperclass();
}
}
}
Date un'occhiata a java.lang.reflect.Proxy
API. Si noti che consente di creare proxy solo per le interfacce.
Per la headstart: http://java.dzone.com/articles/power-proxies-java –
Ho usato usando il codice java ma non so come passare il proxy ai bean di primavera senza usare le librerie proxy fornite da Spring – Mangoose
@manish per passarle a Spring, creare un FactoryBean Spring che restituisce i proxy. – rees
È possibile implementare proxy dinamici o proxy CGLib.
Grazie per la risposta utile. Sfortunatamente la mia implementazione beanfactory è DefaultListableBeanFactory, quindi non posso usare BeanPostProcessor. – Mangoose
@manish nessun problema, grazie per il controllo indietro! – rees