前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记-spring-Bean实例化

Java学习笔记-spring-Bean实例化

作者头像
喵叔
发布2020-09-08 16:12:40
5150
发布2020-09-08 16:12:40
举报
文章被收录于专栏:喵叔's 专栏

零、bean 实例化方式
  1. 构造器实例化 (常用
  2. 静态工厂实例化
  3. 实例工厂实例化
一、构造器实例化

Spring 容器通过Bean 对应类中默认无参构造方法来实例化Bean。

代码语言:javascript
复制
//Bean1.java
package com.itheima.instance.constructor;
public class Bean1 {
}
代码语言:javascript
复制
<!--beans1.xml-->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
      id: Bean唯一标识符;
      class:Bean实例具体实现类,必须是一个完整类名,使用类的全限定名
    -->
    <bean id="bean1" class="com.itheima.instance.constructor.Bean1"/>
</beans>
代码语言:javascript
复制
//InstanceTest1
package com.itheima.instance.constructor;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InstanceTest1 {
    public static void main(String[] args) {
      //配置文件路径
      String xmlPath = "com/itheima/instance/constructor/beans1.xml";
      //加载配置文件
      ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
      //实例化Bean
      Bean1 bean = (Bean1) applicationContext.getBean("bean1");
      System.out.println(bean);
    }
}
二、静态工厂实例化

创建一个静态工厂类来创建Bean的实例,Bean配置中的class属性所指定的不再是Bean实例实现的类,而是静态工厂类,同时还需要使用 factory-method 属性指定所创建的静态工厂方法。

代码语言:javascript
复制
//bean2.java
package com.itheima.instance.static_factory;

public class Bean2 {
}
代码语言:javascript
复制
//MyBean2Factory.java
package com.itheima.instance.static_factory;

public class MyBean2Factory {
    public static Bean2 createBean() {
        return new Bean2();
    }
}
代码语言:javascript
复制
<!--bean2.xml-->
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
      class:静态工厂类完全限定名
      factory-method:定义所需的工厂方法
    -->
    <bean id="bean2"
          class="com.itheima.instance.static_factory.MyBean2Factory"
          factory-method="createBean"/>
</beans>
代码语言:javascript
复制
//InstanceTest2
package com.itheima.instance.static_factory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InstanceTest2 {
    public static void main(String[] args) {
        String xmlPath = "com/itheima/instance/static_factory/beans2.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        System.out.println(applicationContext.getBean("bean2"));
    }
}
三、实例化工厂实例化

配置文件中需要实例化的Bean通过 factory-bean 属性指向配置的实例工厂,然后使用 factory-method 确定使用的是工厂中的哪个方法。

代码语言:javascript
复制
//Bean3.java
package com.itheima.instance.factory;

public class Bean3 {
}
代码语言:javascript
复制
//MyBean3Factory.java
package com.itheima.instance.factory;

public class MyBean3Factory {
    public MyBean3Factory() {
        System.out.println("bean3 工厂实例化中");
    }

    public Bean3 createBean() {
        return new Bean3();
    }
}
代码语言:javascript
复制
<!--bean3.xml-->
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xis="http://www.w3.org/2001/XMLSchema-instance"
       xis:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--配置工厂-->
    <bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"/>
    <!--配置实例工厂和使用的方法-->
    <bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"/>
</beans>
代码语言:javascript
复制
//InstanceTest3.java
package com.itheima.instance.factory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class InstanceTest3 {
    public static void main(String[] args) {
        String xmlPath = "com/itheima/instance/factory/beans3.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
        System.out.println(applicationContext.getBean("bean3"));
    }
}

本节源码下载地址: https://pan.baidu.com/s/1gbHdTRGozS4MHMFivaO9jw 提取码:gr6m https://download.csdn.net/download/gangzhucoll/11014530

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/03/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、bean 实例化方式
  • 一、构造器实例化
  • 二、静态工厂实例化
  • 三、实例化工厂实例化
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档