当前位置: 首页 > news >正文

商丘手机网站制作谷歌排名查询

商丘手机网站制作,谷歌排名查询,大连网络推广营销,深圳品牌网站设计推广文章目录FactoryBean 和 BeanFactory后置处理器BeanPostProcessor 和 BeanFactoryPostProcessorBeanPostProcessorBeanFactoryPostProcessorFactoryBean 和 BeanFactory BeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的…

文章目录

    • FactoryBean 和 BeanFactory
    • 后置处理器BeanPostProcessor 和 BeanFactoryPostProcessor
      • BeanPostProcessor
      • BeanFactoryPostProcessor

FactoryBean 和 BeanFactory

BeanFactory接⼝是容器的顶级接⼝,定义了容器的⼀些基础⾏为,负责⽣产和管理Bean的⼀个⼯⼚,具体使⽤它下⾯的⼦接⼝类型,⽐如ApplicationContext;此处我们重点分析FactoryBean。
Spring中Bean有两种,⼀种是普通Bean,⼀种是⼯⼚Bean(FactoryBean),FactoryBean可以⽣成某⼀个类型的Bean实例(返回给我们),也就是说我们可以借助于它⾃定义Bean的创建过程。
Bean创建的三种⽅式中的静态⽅法和实例化⽅法和FactoryBean作⽤类似,FactoryBean使⽤较多,尤其在Spring框架⼀些组件中会使⽤,还有其他框架和Spring框架整合时使⽤。

// 可以让我们⾃定义Bean的创建过程(完成复杂Bean的定义)
public interface FactoryBean<T> {@Nullable// 返回FactoryBean创建的Bean实例,如果isSingleton返回true,则该实例会放到Spring容器的单例对象缓存池中MapT getObject() throws Exception;@Nullable// 返回FactoryBean创建的Bean类型Class<?> getObjectType();// 返回作⽤域是否单例default boolean isSingleton() {return true;}
}

User类

public class User {private String name;private String addr;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", addr='" + addr + '\'' +'}';}
}

UserFactoryBean类

public class UserFactoryBean implements FactoryBean<Company> {private String userInfo; // 用户姓名,地址public void setUserInfo(String userInfo) {this.userInfo = userInfo;}@Overridepublic User getObject() throws Exception {// 模拟创建复杂对象UserUser user = new User();String[] strings = userInfo.split(",");user.setName(strings[0]);user.setAddr(strings[1]);return user;}@Overridepublic Class<?> getObjectType() {return User.class;}@Overridepublic boolean isSingleton() {return true;}
}

xml配置

<bean id="userBean" class="com.zjq.factory.UserFactoryBean"><property name="userInfo" value="詹先生,hangzhou"/>
</bean>

测试,获取FactoryBean产⽣的对象

Object userBean = applicationContext.getBean("userBean");
System.out.println("bean:" + userBean);

结果如下:

bean:User{name=‘詹先生’, addr=‘hangzhou’}

测试,获取FactoryBean,需要在id之前添加“&”

Object userBean = applicationContext.getBean("&userBean");
System.out.println("bean:" + userBean);

结果如下:

bean:com.zjq.factory.UserFactoryBean@65f6cd78

后置处理器BeanPostProcessor 和 BeanFactoryPostProcessor

Spring提供了两种后处理bean的扩展接⼝,分别为 BeanPostProcessorBeanFactoryPostProcessor,两者在使⽤上是有所区别的。
⼯⼚初始化(BeanFactory)—> Bean对象
BeanFactory初始化之后可以使⽤BeanFactoryPostProcessor进⾏后置处理做⼀些事情
Bean对象实例化(并不是Bean的整个⽣命周期完成)之后可以使⽤BeanPostProcessor进⾏后置处
理做⼀些事情
注意:对象不⼀定是springbean,⽽springbean⼀定是个对象

BeanPostProcessor

BeanPostProcessor是针对Bean级别的处理,可以针对某个具体的Bean。

public interface BeanPostProcessor {@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;}
}

该接⼝提供了两个⽅法,分别在Bean的初始化⽅法前和初始化⽅法后执⾏,具体这个初始化⽅法指的是什么⽅法,类似我们在定义bean时,定义了init-method所指定的⽅法。
定义⼀个类实现了BeanPostProcessor,默认是会对整个Spring容器中所有的bean进⾏处理。如果要对具体的某个bean处理,可以通过⽅法参数判断,两个类型参数分别为Object和String,第⼀个参数是每个bean的实例,第⼆个参数是每个bean的name或者id属性的值。所以我们可以通过第⼆个参数,来判断我们将要处理的具体的bean。
📌注意:处理是发⽣在Spring容器的实例化和依赖注⼊之后。

BeanFactoryPostProcessor

BeanFactory级别的处理,是针对整个Bean的⼯⼚进⾏处理,典型应⽤:PropertyPlaceholderConfifigurer
BeanFactoryPostProcessor
此接⼝只提供了⼀个⽅法,⽅法参数为ConfifigurableListableBeanFactory,该参数类型定义了⼀些⽅法:
ConfifigurableListableBeanFactory
其中有个⽅法名为getBeanDefifinition的⽅法,我们可以根据此⽅法,找到我们定义bean的BeanDefifinition对象。然后我们可以对定义的属性进⾏修改,以下是BeanDefifinition中的⽅法:
BeanDefifinition中的⽅法

⽅法名字类似我们bean标签的属性,setBeanClassName对应bean标签中的class属性,所以当我们拿到BeanDefifinition对象时,我们可以⼿动修改bean标签中所定义的属性值。
**BeanDefifinition对象:**我们在 XML 中定义的 bean标签,Spring 解析 bean 标签成为⼀个 JavaBean,这个JavaBean 就是 BeanDefifinition 。
💡注意:调⽤ BeanFactoryPostProcessor ⽅法时,这时候bean还没有实例化,此时 bean 刚被解析成BeanDefifinition对象。

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

http://www.skylitedrivein.com/news/594.html

相关文章:

  • php动态网站开发优势想要网站导航推广页
  • 网站建设报价模块百度网页版官网
  • 厦门做网站价格专业关键词排名软件
  • wordpress 子主题目录seo外链自动群发工具
  • 深圳发布稳增长措施长春关键词优化平台
  • 山东淄博网站建设公司惠州seo按天计费
  • 音乐外链生成网站怎么做如何优化关键词搜索排名
  • 公司年前做网站好处永久免费制作网页
  • 网站建设logo图片成都seo优化
  • 高端品牌网站建设方案百度热榜
  • 无法创建网站 未能找到web服务器太原seo关键词排名优化
  • 做配单ic去什么网站好企业邮箱如何申请注册
  • 网站建设公司模版爱站工具包官网
  • 杭州网站公司哪家服务好武汉seo优化
  • 网站方案设计百度提问在线回答问题
  • 南丰网站建设网站建设在线建站
  • 网站布局和建站的区别杭州专业seo服务公司
  • 成都电子商务网站开发seo还能赚钱吗
  • 免费网站后台模板营销策略有哪些方面
  • 动漫做暧视频网站西安百度关键词优化排名
  • 找别人做网站 自己管理百度北京分公司官网
  • 做网站都有备案吗seo外链工具有用吗
  • 动态网站的建设搜索网页
  • 石家庄建设网站长沙百度
  • 广东品牌网站建设微信营销软件群发
  • 安徽茶叶商城网站建设专业seo推广
  • 传统的网站开发模式营销软文网站
  • 网站建设风险管理网络推广外包业务怎么样
  • 网站建设专业今日最新重大新闻
  • 整站网站优化费用优化内容