Reputation: 2409
I have a bean which extends other Java file. When I create a Spring bean all public methods (from my and from extended files) are exposed. How can I hide not needed methods in bean XML config, so they are not exposed?
Added explanation:
I expose my beans via RDS for Flex application. So, my beans are available over network. With unneeded methods I have two problems:
Upvotes: 2
Views: 475
Reputation: 70584
If the inherited methods should not be accessed, perhaps you should use aggregation instead of inheritance?
As any code can invoke public inherited methods on that object, this is not specific to spring.
Edit: As you found out yourself, the remoting framework can be configured to not expose all methods. If that hadn't been possible, you could have used:
import java.lang.reflect.Proxy;
public static <I> I restrictToInterface(final I instance, Class<I> publicInterface) {
Object proxy = Proxy.newProxyInstance(
publicInterface.getClassLoader(),
new Class<?>[] {publicInterface},
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(instance, args);
}
}
);
return publicInterface.cast(proxy);
}
Test code:
interface MyRemoteInterface {
void foo(Object bar);
}
class MyBeanImpl implements MyRemoteInterface {
@Override
public void foo(Object bar) {
System.out.println(bar);
}
public void dangerousMethodThatMustNotBeInvoked() {
// launch missiles
}
}
public static void main(String[] args) {
MyBeanImpl beanImpl = new MyBeanImpl();
MyRemoteInterface remotableBean = restrictToInterface(beanImpl, MyRemoteInterface.class);
System.out.println("Remoteable Methods are:");
for (Method m : remotableBean.getClass().getMethods()) {
if (!Modifier.isStatic(m.getModifiers())) {
System.out.println("\t" + m.getName());
}
}
remotableBean.foo("Hello world!");
}
Upvotes: 3
Reputation: 2409
Actually I had a wrong question. My problem has solution which is shown here: http://static.springsource.org/spring-flex/docs/1.0.x/reference/html/ch03s03.html
Upvotes: 2
Reputation: 137777
You could try turning off autowiring. It's only a convenience after all. Doing it "by hand" in your bean configuration file will provide a much better record of what connects to what…
Upvotes: 0
Reputation: 15377
I am a little confused why you care that spring sees them? My initial thought is "make them private or protected".
Upvotes: 0