96SEO 2026-02-19 22:18 21
。

在Spring容器启动过程中,会将Bean解析成Spring内部的BeanDefinition结构;理解为将spring.xml中的bean标签转换成BeanDefinition结构有点类似于XML解析
三、BeanDefinition包含了很多属性和方法。
例如id、class类名、scope、ref依赖的bean等等。
其实就是将bean例如bean的定义信息
四、BeanFactoryPostProcessor是Spring容器功能的扩展接口。
1BeanFactoryPostProcessor在spring容器加载完BeanDefinition之后
2对bean元数据BeanDefinition进行加工处理也就是BeanDefinition
五、BeanFactorybean工厂。
它按照我们的要求生产我们需要的各种各样的bean。
六、Aware感知接口在实际开发中经常需要用到Spring容器本身的功能资源
例如BeanNameAware、ApplicationContextAware等等
BeanNameAware、ApplicationContextAware
七、BeanPostProcessor后置处理器。
在Bean对象实例化和引入注入完毕后
在显示调用初始化方法的前后添加自定义的逻辑。
类似于AOP的绕环通知
前提条件如果检测到Bean对象实现了BeanPostProcessor后置处理器才会执行
2调用初始化BeanInitializingBean和init-methodBean的初始化才算完成
1.xml/annotation/configuation/配置JavaBean
2.BeanDefinitionReader解析配置的JavaBean得到Beandefinition最终得到ListBeanDefinition集合
3.触发BeanFactoryPostProcessor在JavaBean初始化之前执行
4.Spring中的BeanFactory会通过ListBeanDefinition集合遍历初始化所有的JavaBean对象
5.如果自己的JavaBean需要调动Spring上下文中的资源(方法或属性)那么需要实现*Aware感知接口
6.如果自己的JavaBean已经初始化好了还需扩展功能那么需要借助BeanPostProcessor后置处理器来实现
BeanFactoryPostProcessor是Spring容器功能的扩展接口怎么理解比如假设我们现在有一个内部类Person其原本有三个属性。
BeanFactoryPostProcessor的作用就是可以在初始化对象之前可以做一个补充它内部类原本只有三个属性我们可以给它加一个关联属性User进去并对新增的关联属性User对象做出相对应的处理具体代码详解如下
{}//在初始化对象之前可以做一个补充比如上面原本只有三个属性我们也可以给它加一个关联属性Userpublic
sex;}//这里可以针对我们新增的关联属性User对象作出处理public
解析配置得到List集合与遍历初始化Bean对象具体代码详解如下
org.springframework.beans.factory.config.BeanDefinition;import
2.BeanDefinitionReader解析配置的JavaBean得到Beandefinition最终得到ListBeanDefinition集合ListBeanDefinition
ArrayList();//BeanDefinitionReader把spring-context.xml中所有的bean标签都解析成了List集合for
4.Spring中的BeanFactory会通过ListBeanDefinition集合遍历初始化所有的JavaBean对象String
bean.getBeanClassName();//得到的就是spring-context.xml中bean标签中class里的值Class.forName(beanClassName);//将配置的所有JavaBean进行反射实例化}}
如果自己的JavaBean需要调动Spring上下文中的资源(方法或属性)那么需要实现*Aware感知接口比如BeanDefinition实现了BeanNameAware、ApplicationContextAware接口具体详解如下
那么现在有个问题当我们的Spring容器初始化Bean完成之后我们可能还需要加工一下即进行再初始化。
因为并不是每一个类都是我们自己写的。
也许我们需要用别人的类内容然后在此基础上再进行拓展。
那么在此时我们能改动别人写的类里面的源码吗不能。
因为这样有可能影响到其他的功能这时候我们的解决办法就是自己写一个类去继承别人的类然后进行再一波初始化我们这里以BaseDao为例
我们需要在继承BaseDao方法后在子类中进行初始化方法的重写即再一次初始化具体如下
MyBaseDao(){//重写初始化方法super();System.out.println(初始化...);}
}那么在此时如果我们在初始化之后不满意在初始化之后想修改Bean的内容可以利用BeanPostProcessor后置处理器来完成。
这时候可以在Bean对象实例化和引入注入完毕后在显示调用初始化方法的前后添加自定义逻辑。
类似于AOP的环绕通知环绕通知不了解的可以通过下面链接进行跳转至对应博客界面如下
Kissship的博客Spring之AOP篇https://blog.csdn.net/weixin_74263417/article/details/132340241?spm1001.2014.3001.5501那么到这里我们就完成了Bean的创建工作。
1.在Spring中JavaBean默认是单例的但是可以配置多例。
3.单例JavaBean是跟着spring上下文初始化的容器生对象生容器死对象死此处对象指JavaBean。
UserBizImpl2();System.out.println(this.num
this.num);System.out.println(this.name);System.out.println(this.age);System.out.println(this.hobby);}
{System.out.println(初始化方法);}public
{System.out.println(销毁方法);}public
xmlnshttp://www.springframework.org/schema/beansdefault-autowirebyTypexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd!--
凡是在Spring配置文件spring-context.xml中配置,那么该类javabean就交给了Spring容器管理--bean
classcom.kissship.ioc.web.UserAction
classcom.kissship.ioc.web.GoodsAction
classcom.kissship.ioc.service.impl.UserServiceImpl2
classcom.kissship.ioc.service.impl.UserServiceImpl1
classcom.kissship.aop.biz.impl.BookBizImpl
classcom.kissship.aop.advice.MyMethodBeforeAdvice
classcom.kissship.aop.advice.MyAfterReturningAdvice
idmyAfterReturningAdvice/beanbean
classcom.kissship.aop.advice.MyMethodInterceptor
classcom.kissship.aop.advice.MyThrowsAdvice
classorg.springframework.aop.support.RegexpMethodPointcutAdvisor
idregexpMethodPointcutAdvisorproperty
refmyAfterReturningAdvice/propertyproperty
value.*buy/property/bean!--代理--bean
classorg.springframework.aop.framework.ProxyFactoryBean
nameproxyInterfaceslistvaluecom.kissship.aop.biz.IBookBiz/value/list/property
nameinterceptorNameslistvaluemethodBeforeAdvice/value
valuemyAfterReturningAdvice/value--valueregexpMethodPointcutAdvisor/valuevaluemyMethodInterceptor/valuevaluemyThrowsAdvice/value/list/property/bean!--
classcom.kissship.beanlife.ParamAction
value刘三金/constructor-argconstructor-arg
value19/constructor-argconstructor-arg
namehobbylistvalue来自星星的哥/valuevalue天空一声巨响/valuevalue劳资闪亮登场/value/list/constructor-arg/beanbean
classcom.kissship.beanlife.InstanceFactory
idinstanceFactoryscopeprototype
destroy-methoddestroy/bean/beans
org.springframework.beans.factory.BeanFactory;
org.springframework.beans.factory.xml.XmlBeanFactory;
org.springframework.context.ApplicationContext;
org.springframework.context.support.ClassPathXmlApplicationContext;
org.springframework.core.io.ClassPathResource;
org.springframework.core.io.Resource;/**
{ClassPathXmlApplicationContext
ClassPathXmlApplicationContext(/spring-context.xml);
ClassPathXmlApplicationContext(/spring-context.xml);ParamAction
applicationContext.getBean(paramAction);ParamAction
applicationContext.getBean(paramAction);//
System.out.println(p1p2);p1.execute();p2.execute();//
单例时容器销毁instanceFactory对象也销毁多例时容器销毁对象不一定销毁applicationContext.close();}//
ClassPathXmlApplicationContext(/spring-context.xml);}//
BeanFactory会初始化bean对象但会根据不同的实现子类采取不同的初始化方式//
默认情况下bean的初始化单例模式立马会执行但是此时XmlBeanFactory作为子类单例模式下容器创建bean依赖没有初始化只有要获取使用bean对象才进行初始化Testpublic
ClassPathXmlApplicationContext(/spring-context.xml);Resource
ClassPathResource(/spring-context.xml);BeanFactory
beanFactory.getBean(instanceFactory);}}执行Demo2结果如下
具体实操在spring-context.xml中ParamAtion的Bean配置的class属性里加上scope属性并赋值多例(原型模式)
Demo2里已经写了体现单例与多例的初始化时间点的方法所以我们只需要在spring-context.xml中给它定一个多例的属性值然后测试看效果即可xml代码如下
classcom.kissship.beanlife.InstanceFactory
idinstanceFactoryscopeprototype
classcom.kissship.beanlife.InstanceFactory
idinstanceFactoryscopesingleton
那么现在问题又来了虽然验证了单例与多例的初始化时间点但是看不出到底是不是使用Spring创建的那么现在我们上代码验证看看结果。
刚刚我们在演示时多例并没有执行初始化方法现在我们把xml文件里的单例改成多例然后再Demo2测试类中加上以下代码
BeanFactory会初始化bean对象但会根据不同的实现子类采取不同的初始化方式。
默认情况下bean的初始化单例模式会立马执行但是此时XmlBeanFactory作为子类单例模式下容器创建bean依赖没有初始化·只有要获取使用bean对象才进行初始化。
1.先把xml多例模式改为单例然后运行Test2方法再运行Test3方法比较结果。
运行Test2的结果(先注释论证是否为Sprring创建新增的代码再运行)
最后Spring之bean的生命周期就到这里祝大家在敲代码的路上一路通畅!
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback