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);
}
}

最新文章

  1. 【实例】html5-canvas中实现背景图片的移动
  2. Drools给日志打标签
  3. 使用命令参数方式指定log4j配置文件
  4. MyEclipse 修改代码不生效
  5. QT输入输出(一) 之 QDataStream 测试
  6. ListView滑动不爽,滚动一页得滑几次?该用分页列表啦!
  7. Latch-up 閂鎖效應 &amp; 靜電放電模式
  8. 后台验证url是不是有效的链接
  9. Android onTouchEvent方法
  10. 49-Group Anagrams-(Medium) 题解
  11. [转]浅谈C++指针直接调用类成员函数
  12. django模板(一)
  13. gp工具的许可
  14. django开发(二)
  15. Java代码审计入门篇
  16. loj#2016. 「SCOI2016」美味
  17. dubbo 框架文档地址
  18. 打包制作 ANE
  19. activemq部署
  20. linq to datatable 和lambda查询datatable

热门文章

  1. IDEA修改git账号密码
  2. 修改cmd命令默认路径
  3. 容器安全与EDR的异同
  4. Android之selector选择器的使用
  5. OpenCASCADE动画功能2
  6. PAT甲级——A1071 Speech Patterns
  7. 恭喜"微微软"喜当爹,Github嫁入豪门。
  8. linux下安装rabbitmq 集群
  9. js如何往数组Array中添加元素 (2013-09-04 10
  10. 关于obj文件的理解