Spring是自动帮我们创建对象的,有几种创建Bean的方式呢?

构造方法实例化:(默认无参数)其实就是反射new Instance().

静态工厂实例化:

实例工厂实例化:

一般不会改变它实例化的方式。其他两种了解一下即可。

<?xml version="1.0" encoding="UTF-8"?>
<!-- 别去schema,schema是文件,本地的文件,你得引那个头 --> <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">
<!-- demo1快速入门================================================= -->
<!-- 把接口和实现类在这个配置文件中配置,有了实现类的全路径之后到时候才能用工厂反射 --> <!-- 通过一个<bean>标签来设置类的信息,通过id属性为类起个标识. -->
<!-- 接口,实现类,配置文件也都有了 -->
<!-- 现在有一个工厂Spring为我们提供好了,其实就是解析这个XML文件 -->
<!-- 这个工厂你自己写会不会写?你用dom4j找里面的bean标签,找到class的属性值,然后就可以Class.forName()反射生成类的实例.其实Spring
也是这么做的,只不过工厂由Spring提供好了
-->
<bean id="helloService" class="cn.itcast.spring3.demo1.HelloServiceImpl">
<!-- 使用<property>标签注入属性
value指的是普通值
ref指的是对象
-->
<property name="info" value="传智播客"></property>
</bean>
<!-- demo1快速入门 -->
<!-- demo2Bean的实例化 -->
<!-- 默认情况下使用的就是无参数的构造方法. --> <bean id="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
<!-- 第二种使用静态工厂实例化 不能写class了,因为现在不是由Spring直接帮你创建对象了-->
<bean id="bean2" class="cn.itcast.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>
<!-- 第三种使用实例工厂实例化 -->
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
<!-- 要先把Bean3Factory实例化 -->
<bean id="bean3Factory" class="cn.itcast.spring3.demo2.Bean3Factory"></bean> </beans>
package cn.itcast.spring3.demo2;
/**
* 使用无参数的构造方法实例化
* @author zhongzh
*
*/
public class Bean1 {
/*public Bean1(String name){//这里写了一个带参构造,那么无参构造就不执行了
//有一个有参无参就没有了 }*/
public Bean1(){
System.out.println("使用无参数的构造方法实例化Bean1方法.....");
}
}
package cn.itcast.spring3.demo2;
/**
* 使用静态工厂的方式实例化
* @author zhongzh
*
*/
public class Bean2 { }
package cn.itcast.spring3.demo2;
/**
* 使用实例工厂实例化
* @author zhongzh
*
*/
public class Bean3{
//加载配置文件的时候就会加载这个类了,会帮你创建了 }
package cn.itcast.spring3.demo2;
/**
* Bean2的静态工厂
* @author zhongzh
*
*/
public class Bean2Factory {
public static Bean2 getBean2(){
System.out.println("静态工厂的获得Bean2的方法....");
return new Bean2();//什么是静态工厂?就是这里提供一个静态的方法来返回Bean2的实例 }
}
package cn.itcast.spring3.demo2;
/**
* 使用实例工厂
* @author zhongzh
*
*/
//实例工厂与静态工厂的唯一区别是它里面的方法是不是静态的
public class Bean3Factory {
public Bean3 getBean3(){
System.out.println("Bean3实例工厂的getBean3方法.....");
return new Bean3();
}
}
package cn.itcast.spring3.demo2;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* Bean的实例化的方式
*
* @author zhongzh
*
*/
public class SpringTest2 {
@Test
public void demo1(){
//无参数的构造方法的实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");//通过配置文件里面配置的key获得bean1 System.out.println(bean1);
}
@Test
public void demo2(){
//静态工厂的实例化
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");//通过配置文件里面配置的key获得bean2 System.out.println(bean2);
}
@Test
//实例工厂实例化
public void demo3(){
//静态工厂的实例化 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");//通过配置文件里面配置的key获得bean2 System.out.println(bean3);
}
}

day38 07-Spring框架Bean的时候方式的更多相关文章

  1. 使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”

    使用spring框架,用xml方式进行bean装配出现“The fully qualified name of the bean's class, except if it serves...”. 原 ...

  2. Spring中bean的注入方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入.依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Spring ...

  3. Spring 中Bean的装配方式

    最近又买了一本介绍SSM框架的书,是由黑马程序员编写的,书上讲的很好理解,边看边总结一下.主要总结一下bean的装配方式. Bean的装配可以理解为依赖系统注入,Bean的装配方式即Bean依赖注入的 ...

  4. 面试题: Spring 框架 Bean的生命周期

    [Java面试五]Spring总结以及在面试中的一些问题.   1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本 ...

  5. spring框架学习(四)——注解方式AOP

    注解配置业务类 使用@Component("s") 注解ProductService 类 package com.how2java.service; import org.spri ...

  6. spring框架bean注入

    今天学习了spring框架,刚刚入门简单的了解了spring并学习了bean的注入IOC:IOC(Inversion of Control,控制反转)不是什么技术,而是一种设计思想.它的目的是指导我们 ...

  7. Spring框架bean的配置(2):SpEL:引用 Bean、属性和方法。。。

    将这些架包放入在工程目录下建立的lib文件夹里,并解压 commons-logging-1.1.1 spring-aop-4.0.0.RELEASE spring-beans-4.0.0.RELEAS ...

  8. String框架搭建的基本步骤,及从 IOC & DI 容器中获取 Bean(spring框架bean的配置)--有实现数据库连接池的链接

    Spring框架的插件springsource-tool-suite-3.4.0.RELEASE-e4.3.1-updatesite(是一个压缩包)导入步骤: eclipse->help-> ...

  9. spring实例化bean三种方式

    我看了这篇博文<https://www.cnblogs.com/zhanglei93/p/6221546.html>,以及自己实践总结了关于spring实例化bean对象的3种方式. 一. ...

  10. Spring之Bean的配置方式

    在博客中为了演示容器Bean实例化时暴露出的几个接口,将UserBean配置在XML中,其实常见的Bean的配置有3种.1.基于xml配置Bean 2.使用注解定义Bean 3.基于java类提供Be ...

随机推荐

  1. LUOGU P3382 【模板】三分法 (三分)

    传送门 解题思路 三分,填坑.每次取l与r的中间值mid,然后向左移一点点,向右移一点点进行判断,判断时用秦九韶算法即可. #include<iostream> #include<c ...

  2. CI框架 session 不能读取的问题,PHP7环境

    根本原因在这,libraries/Session/Session.php 中 128行: 如果sessionid的长度不是40的话,每次执行都会 unset($_COOKIE[ci_session]) ...

  3. Linux下c开发 之 线程通信

    Linux下c开发 之 线程通信 1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型.Linux是一种“多进程单线程”的操作系统.Linux本身 ...

  4. [原创]Java调用PageOffice给Word中的Table赋值

    Word中的table操作需要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table.因此,要想使用table,则必须在w ...

  5. 《DSP using MATLAB》Problem 8.4

    今天是六一儿童节,陪伴不了家人,心里思念着他们,看着地里金黄的麦子,远处的山,高高的天 代码: %% ------------------------------------------------- ...

  6. kuangbin带我飞QAQ 并查集

    1. POJ 2236 给出N个点,一开始图是空白的,两个操作,一个是增加一个点(给出坐标),一个是查询两个点间是否相通,当两点间的距离小于D或者两点通过其他点间接相连时说这两个点相通.并查集维护,每 ...

  7. react使用swiper,解决添加点击事件首位图片点击失效,解决轮播按钮被覆盖问题

    JS部分 createSwiper1() { var option = { // slidesPerView: 5, slidesPerView: 3, centeredSlides:true, }; ...

  8. mysql系统变量与状态变量

    一.系统变量分为全局系统变量和会话系统变量:有些变量既是全局系统变量,有些变量只有全局的,有些变量只有会话的. .变量的查询: show global variables like 'log' \G; ...

  9. Django WSGI响应过程之WSGIHandler

    class WSGIHandler(base.BaseHandler): request_class = WSGIRequest def __init__(self, *args, **kwargs) ...

  10. volatile和指令重排序

    volatile 的作用 1 精致指令重排序 2 多线程访问同一个变量的时候,每次都是取最新的,而不会使用当前cpu缓存的那一份.