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

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

静态工厂实例化:

实例工厂实例化:

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 别去schema,schema是文件,本地的文件,你得引那个头 -->
  3.  
  4. <beans xmlns="http://www.springframework.org/schema/beans"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="
  7. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  8. <!-- demo1快速入门================================================= -->
  9. <!-- 把接口和实现类在这个配置文件中配置,有了实现类的全路径之后到时候才能用工厂反射 -->
  10.  
  11. <!-- 通过一个<bean>标签来设置类的信息,通过id属性为类起个标识. -->
  12. <!-- 接口,实现类,配置文件也都有了 -->
  13. <!-- 现在有一个工厂Spring为我们提供好了,其实就是解析这个XML文件 -->
  14. <!-- 这个工厂你自己写会不会写?你用dom4j找里面的bean标签,找到class的属性值,然后就可以Class.forName()反射生成类的实例.其实Spring
  15. 也是这么做的,只不过工厂由Spring提供好了
  16. -->
  17. <bean id="helloService" class="cn.itcast.spring3.demo1.HelloServiceImpl">
  18. <!-- 使用<property>标签注入属性
  19. value指的是普通值
  20. ref指的是对象
  21. -->
  22. <property name="info" value="传智播客"></property>
  23. </bean>
  24. <!-- demo1快速入门 -->
  25. <!-- demo2Bean的实例化 -->
  26. <!-- 默认情况下使用的就是无参数的构造方法. -->
  27.  
  28. <bean id="bean1" class="cn.itcast.spring3.demo2.Bean1"></bean>
  29. <!-- 第二种使用静态工厂实例化 不能写class了,因为现在不是由Spring直接帮你创建对象了-->
  30. <bean id="bean2" class="cn.itcast.spring3.demo2.Bean2Factory" factory-method="getBean2"></bean>
  31. <!-- 第三种使用实例工厂实例化 -->
  32. <bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
  33. <!-- 要先把Bean3Factory实例化 -->
  34. <bean id="bean3Factory" class="cn.itcast.spring3.demo2.Bean3Factory"></bean>
  35.  
  36. </beans>
  1. package cn.itcast.spring3.demo2;
  2. /**
  3. * 使用无参数的构造方法实例化
  4. * @author zhongzh
  5. *
  6. */
  7. public class Bean1 {
  8. /*public Bean1(String name){//这里写了一个带参构造,那么无参构造就不执行了
  9. //有一个有参无参就没有了
  10.  
  11. }*/
  12. public Bean1(){
  13. System.out.println("使用无参数的构造方法实例化Bean1方法.....");
  14. }
  15. }
  1. package cn.itcast.spring3.demo2;
  2. /**
  3. * 使用静态工厂的方式实例化
  4. * @author zhongzh
  5. *
  6. */
  7. public class Bean2 {
  8.  
  9. }
  1. package cn.itcast.spring3.demo2;
  2. /**
  3. * 使用实例工厂实例化
  4. * @author zhongzh
  5. *
  6. */
  7. public class Bean3{
  8. //加载配置文件的时候就会加载这个类了,会帮你创建了
  9.  
  10. }
  1. package cn.itcast.spring3.demo2;
  2. /**
  3. * Bean2的静态工厂
  4. * @author zhongzh
  5. *
  6. */
  7. public class Bean2Factory {
  8. public static Bean2 getBean2(){
  9. System.out.println("静态工厂的获得Bean2的方法....");
  10. return new Bean2();//什么是静态工厂?就是这里提供一个静态的方法来返回Bean2的实例
  11.  
  12. }
  13. }
  1. package cn.itcast.spring3.demo2;
  2. /**
  3. * 使用实例工厂
  4. * @author zhongzh
  5. *
  6. */
  7. //实例工厂与静态工厂的唯一区别是它里面的方法是不是静态的
  8. public class Bean3Factory {
  9. public Bean3 getBean3(){
  10. System.out.println("Bean3实例工厂的getBean3方法.....");
  11. return new Bean3();
  12. }
  13. }
  1. package cn.itcast.spring3.demo2;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. /**
  8. * Bean的实例化的方式
  9. *
  10. * @author zhongzh
  11. *
  12. */
  13. public class SpringTest2 {
  14. @Test
  15. public void demo1(){
  16. //无参数的构造方法的实例化
  17. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
  18. Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");//通过配置文件里面配置的key获得bean1
  19.  
  20. System.out.println(bean1);
  21. }
  22. @Test
  23. public void demo2(){
  24. //静态工厂的实例化
  25. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
  26. Bean2 bean2 = (Bean2) applicationContext.getBean("bean2");//通过配置文件里面配置的key获得bean2
  27.  
  28. System.out.println(bean2);
  29. }
  30. @Test
  31. //实例工厂实例化
  32. public void demo3(){
  33. //静态工厂的实例化
  34.  
  35. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//实例化工厂
  36. Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");//通过配置文件里面配置的key获得bean2
  37.  
  38. System.out.println(bean3);
  39. }
  40. }

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. HOOK NtCreateSection

    本程序使用了hde32反汇编引擎,所以性能更加稳定! #pragma once #include <ntddk.h> NTSYSAPI NTSTATUS NTAPI NtCreateSec ...

  2. SpringBoot学习笔记(三):SpringBoot集成Mybatis、SpringBoot事务管理、SpringBoot多数据源

    SpringBoot集成Mybatis 第一步我们需要在pom.xml里面引入mybatis相关的jar包 <dependency> <groupId>org.mybatis. ...

  3. 纯 CSS 实现实心三角形和空心三角形

    一.实心三角形 1.代码 .div-angles{ width:; height:; border-style: solid; border-width:30px; border-color: tra ...

  4. MyBatis与JPA的区别

    参考博客: https://www.cnblogs.com/llywy/p/10103136.html https://www.jianshu.com/p/32ce87c163d6 MyBatis分为 ...

  5. [原创]新版PageOffice V4.0为什么用弹出窗口的方式打开文件?

    前的包含文档处理功能的Web办公系统,在打开文档的时候,一部分系统是采用Office文档嵌入到主窗口页面中右侧工作区域的方式,另一部分系统采用的是弹出新的浏览器窗口,里面完整的嵌入Office文件的打 ...

  6. codeforces600E. Lomsat gelral(dsu on tree)

    dsu on tree先分轻重儿子先处理轻边,再处理重儿子再加上轻儿子的答案 #include<iostream> #include<cstdio> #include<q ...

  7. leetcode 49 Group Anagram

    lc49 Group Anagram 逻辑很简单,就是统计字母出现次数,然后将完全相同的字符串放入同一list 关键是怎么实现 统计的部分,可以通过将string排序,Arrays.sort(),或者 ...

  8. 洛谷 P3750 [六省联考2017]分手是祝愿

    传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...

  9. PHP--自动回调接口,分批修改数据

    /** * 修复 a表 生日格式问题 * @author qin */ public function update_birthday_one() { $this->load->model ...

  10. [LOJ#162]模板题-快速幂2

    <题目链接> 注意:这可能也是一道模板题. 注意2:$p=998224352$ 注意3:对于$100\%$的数据,$n\leq 5 \times 10^6$ 这个题很启发思路,如果直接快速 ...