一个.java文件是如何转为Spring能识别的bean

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。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架识别bean的方式有以下几种: 1. 扫描注解:Spring可以通过扫描指定包路径下的类来自动识别带有特定注解的bean。您可以使用`@Component`、`@Service`、`@Repository`等注解来标识bean,并在配置文件中配置包扫描路径。 2. XML配置:通过在XML配置文件中显式地声明bean,Spring可以根据配置文件中的定义来创建和管理bean。您可以使用`<bean>`元素来定义bean,并指定其类名、属性值等信息。 3. Java配置类:使用Java配置类,您可以通过编写代码来配置bean。通过在Java配置类上添加`@Configuration`注解,并在方法上添加`@Bean`注解来定义bean。 4. 自动装配:Spring可以自动识别并装配bean,使其能够在其他bean中进行依赖注入。您可以使用`@Autowired`、`@Resource`等注解来实现自动装配。 5. 条件化注册:Spring提供了条件化注册bean的功能,可以根据特定条件来决定是否注册某个bean。您可以使用`@Conditional`注解来标记一个条件,当满足该条件时才会注册对应的bean。 6. Bean后置处理器:Spring提供了Bean后置处理器的机制,您可以实现自己的后置处理器,在bean创建后对其进行额外的处理。通过实现`BeanPostProcessor`接口,您可以在bean的初始化前后对其进行处理。 这些方式可以单独使用,也可以结合使用。Spring框架会根据配置文件和注解来识别和创建bean,并管理它们的生命周期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值