final class without implementing interfaces can be creating by Spring

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.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=151667&siteId=1