java文件在经过编译器编译后会生成.class 文件。.class文件会包含类的一些基本信息,比如类名,构造函数,属性,方法等。
.class 文件会由jvm 加载到jvm。至于这个类是如何加载到jvm的,是遵从类的加载机制:双亲委任原则。
类加载到jvm后,在spring 的环境下,会统一转为能使用的bean,并由IOC来统一管理
- 1一些类,比如jvm自己启动需要的类会先被加载进来
- 2一些有注解的类,比如@Controller @Service @Repository @Component 这些注解修饰的类也会被加载进来
- 3在2加载进来的过程中,如果有注解注入的类,比如@Autowired @Resource 修饰的属性类,也会被加载到ioc
ioc会管理所有初始化后的bean。一般情况下bean 的作用域都是单例的,也有protoful 的scope ,这种情况就是每次需要一个bean 都会去new一次。
这个过程需要注意:循环引用的问题,通过使用setter注入或注解注入来解决循环引用的问题。
另一个问题就是 ioc 的底层实现,就是这么多的bean 初始化后存在哪里,是用的什么数据结构在存储很显然,就是Map
那具体就是ConcurrentHashMap,一个java bean 在spring 中是通过BeanDefinition来定义的。可以看到DefaultListableBeanFactory中有对ioc容器的声明就是一个ConcurrentHashMap。
原文地址:https://blog.csdn.net/u014209205
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。