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

做影视网站怎么亿星网站建设

做影视网站怎么,亿星网站建设,百度排行,反邪手机网站建设方案一,FactoryBean 的作用 FactoryBean与BeanFactory并不是一个东西,实质上FactoryBean只是Bean工厂当中的一种特殊Bean,在 Spring 框架中,FactoryBean 是一个非常特殊的接口,它的主要作用是自定义 Bean 的实例化逻辑&am…

一,FactoryBean 的作用

FactoryBean与BeanFactory并不是一个东西,实质上FactoryBean只是Bean工厂当中的一种特殊Bean,在 Spring 框架中,FactoryBean 是一个非常特殊的接口,它的主要作用是自定义 Bean 的实例化逻辑,可以在 Spring 容器中代替传统的 @BeanXML 中的 <bean> 标签提供复杂对象的创建方式。

在 Spring 框架中,FactoryBean 是一个非常特殊的接口,它的主要作用是自定义 Bean 的实例化逻辑,可以在 Spring 容器中代替传统的 @BeanXML 中的 <bean> 标签提供复杂对象的创建方式。

1、使用方式

FactoryBean<T> 是一个泛型接口,你需要实现它的三个核心方法:

public interface FactoryBean<T> {// 返回由 FactoryBean 创建的对象(即实际注入到容器中的 Bean)T getObject() throws Exception;// 返回创建的对象的类型Class<?> getObjectType();// 返回是否是单例,true 表示容器只创建一个实例boolean isSingleton();
}

2、使用场景示例

创建代理对象(比如 MyBatis 中的 MapperFactoryBean)
public class MyServiceProxyFactoryBean implements FactoryBean<MyService> {@Overridepublic MyService getObject() throws Exception {// 创建一个代理对象return (MyService) Proxy.newProxyInstance(MyService.class.getClassLoader(),new Class[]{MyService.class},new MyServiceInvocationHandler());}@Overridepublic Class<?> getObjectType() {return MyService.class;}@Overridepublic boolean isSingleton() {return true;}
}

配置方式:

<bean id="myService" class="com.example.MyServiceProxyFactoryBean"/>

3、与普通 Bean 的区别

普通 BeanFactoryBean
直接由容器反射实例化自定义创建逻辑
配置 <bean class="XXX"> 后得到的是该类的实例配置 <bean class="XXXFactoryBean"> 后得到的是 getObject() 返回的实例
比较适合简单对象更适合复杂、动态、第三方对象的创建

4、特殊语法:& 前缀

  • Spring 容器中 FactoryBean 本身也是一个 Bean。

  • 若要获取 FactoryBean 自身而不是它生产的对象,需使用 & 前缀。

ApplicationContext context = ...;
Object factoryBean = context.getBean("&myService");  // 获取的是 FactoryBean 实例
Object realBean = context.getBean("myService");     // 获取的是 getObject() 的返回值

5、典型应用

  • MyBatis 的 MapperFactoryBean

  • Spring AOP 的代理工厂

  • Spring Cloud、Dubbo 的远程代理生成器

  • 对第三方工厂模式的整合

二,底层实现

#BeanFactory

/**  * FactoryBean接口定义了工厂方法模式的实现,用于在Spring框架中创建对象。  * 实现该接口的类可以自定义对象的创建过程,而不仅仅是通过构造器来创建。  *   * @author jixu  * @title FactoryBean  * @date 2025/5/20 14:00  */
public interface FactoryBean<T> {  /**  * 获取由FactoryBean创建的对象。  *   * @return 创建的对象实例。  */  T getObject();  /**  * 判断由FactoryBean创建的对象是单例还是多例。  *   * @return 如果对象是单例,则返回true;否则返回false。  */  boolean isSingleton();  
}

#AbstractBeanFactory

修改getBean的逻辑,这里实现了一个基本的FactoryBean的功能,其中对于获取FactoryBean自身还未实现

public Object getBean(String beanName) {  // 尝试从缓存当中获取Bean  Object sharedInstance = super.getSingletonBean(beanName);  if (sharedInstance != null){  return getObjectForBeanInstance(sharedInstance,beanName);  }  // 如果没有尝试创建Bean,Bean的创建需要通过BeanDefinition  BeanDefinition beanDefinition = getBeanDefinition(beanName);  if (beanDefinition == null){  throw new BeansException("beanDefinition:【" + beanName + "】 为空");  }  // 创建Bean  Object bean = createBean(beanName, beanDefinition);  return getObjectForBeanInstance(bean,beanName);  }  
/**  * 根据Bean实例获取应返回的对象实例  * 此方法主要用于处理FactoryBean的实例,以确保正确地获取对象  *  * @param beanInstance Bean实例,可能是FactoryBean实例  * @param beanName Bean的名称,用于标识Bean  * @return 返回的对象实例,可能是FactoryBean创建的对象,也可能是Bean实例本身  */  
public Object getObjectForBeanInstance(Object beanInstance,String beanName){  // 初始化对象为传入的Bean实例  Object object = beanInstance;  // 判断是否为FactoryBean实例  if (beanInstance instanceof FactoryBean){  // 强制转换为FactoryBean类型  FactoryBean factoryBean = (FactoryBean) beanInstance;  try {  // 判断FactoryBean是否生成单例Bean  if (factoryBean.isSingleton()){  // 尝试从FactoryBean对象缓存中获取对象  object = factoryBeanObjectCache.get(beanName);  // 如果缓存中不存在,则调用FactoryBean的getObject方法创建对象,并存入缓存  if (object == null){  object = factoryBean.getObject();  this.factoryBeanObjectCache.put(beanName,object);  }  }else {  // 如果不是单例Bean,直接调用FactoryBean的getObject方法创建对象  object = factoryBean.getObject();  }  } catch (Exception e) {  // 如果FactoryBean在创建对象时抛出异常,重新包装并抛出BeansException  throw new BeansException("FactoryBean threw exception on object[" + beanName + "] creation", e);  }  }  // 返回最终的对象实例  return object;  
}
http://www.dtcms.com/wzjs/594528.html

相关文章:

  • 建筑类专业做教育的网站公众号引流推广
  • 灯饰网站建设长沙手机网站建设公司
  • 计算机技术员网站建设怎么收录优美图片
  • 微分销手机网站制作株洲网站建设 英铭
  • 如何申请免费网站缪斯设计网站
  • 汉口网站建设制作郑州证件制作
  • 网络营销托管服务商指的是哈尔滨seo排名优化公司价格
  • 接网站建设的单子wordpress 总提示更新
  • 网站制作前景如何一个空间做多个网站
  • 武冈做网站川畅联系 做网站多少钱
  • 邢台网站制作哪里好网站用后台更换图片
  • 运城做网站的公司沈阳网站建设工作室
  • 国内做视频的网站求好用的seo软件
  • 阿里云的网站建设方案衡水企业网站制作报价
  • 公明网站建设怎么做网站的建设模式是指什么
  • 免费网站建设魔坊wordpress 网页游戏
  • php网站开发实例 电子书seo价格查询公司
  • 做淘宝网站怎么弄的wordpress启用memcache
  • 网站开发建设项目服务清单设计师常用的图片网站
  • 甘肃省城乡城乡建设厅网站问题反馈的网站怎么做
  • 企业网站设置大型网站怎样做优化PHP
  • 杭州网站建设方案推广网络服务的服务提供者包括( )
  • 不同的网站 做301做篮球网站用的背景图
  • 家具建设企业网站台州建设局网站
  • 网站开发趋势2022网站seo
  • wordpress 门户网站淘宝网站开发方式
  • 网站网页直播怎么做的专业网站设计制合肥作
  • 太原做微网站的公司建筑设计理念万能模板
  • 凡科快图网站九宫格导航网站
  • 旧电脑怎么做网站运营实力 网站建设