【问题标题】:final class without implementing interfaces can be creating by Spring没有实现接口的最终类​​可以由 Spring 创建
【发布时间】:2019-03-08 16:26:37
【问题描述】:

这是一个没有实现接口的最终类​​:

@Component("finalClass")
public final class FinalClass {
    public String hello(){
        return "hello";
    }
}

这是测试类:

 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());
    }
}

它可以运行。 final 类不能扩展,也没有实现任何接口。为什么Spring可以创建它?

【问题讨论】:

  • 只有当你在组件上应用了任何 AOP 切入点时,Spring 才需要为组件继承或创建代理类(例如,使用 @Transactional 注释管理 jdbc 事务)。否则它可以只是一个普通的 java 对象

标签: java xml spring algorithm oop


【解决方案1】:

这是因为 spring 使用反射来做到这一点,它可以克服这些限制。这就是为什么 spring 可以在对象上创建代理,这些代理是最终的,可以访问私有成员等等。

【讨论】:

  • 哦,我明白了。非常感谢!所以如果我们不使用 AOP,Spring 使用反射。而如果我们使用AOP,Spring会使用代理,它会抛出异常。
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2016-02-21
  • 2017-04-09
相关资源
最近更新 更多