Changchao Liu :
This is a final class without implementing interfaces:
@Component("finalClass")
public final class FinalClass {
public String hello(){
return "hello";
}
}
This is the test class:
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
FinalClass finalClass = (FinalClass) ac.getBean("finalClass");
System.out.println(finalClass.hello());
}
}
It can run. The final class can not be extending, and it doesn't implement any interfaces. Why can Spring create it?
Andronicus :
It's because spring uses reflection to do that, which can overcome those limitations. That's why spring can create proxies over objects, that are final, reach to private members and so on.