在工程src目录下创建applicationContext.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<beans>
1.常用 bean
在src文件下创建Bean1.java文件
注意当前使用spring创建的对象默认是无参构造方法,如果当前类中带有参数可以创建一个无参构造方法
public class Bean1 {
private String name;
public Bean1(String name) {
super();
this.name = name;
}
public Bean1() {
super();
System.out.println("bean1 构造函数调用");
}
}
在资源文件applicationContext.xml中配置bean
<!-- 1. 实例化bean -->
<bean id="bean1" class="com.igeek.Bean1"></bean>
创建测试类 SpringTest.java测试
@Test
public void test1()
{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1) ac.getBean("bean1");
System.out.println(bean1);
}
2. 静态工厂创建bean
在src 目录下创建Bean2.java
public class Bean2 {
public Bean2() {
super();
// TODO Auto-generated constructor stub
System.out.println("Bean2 构造函数调用 ");
}
public static Bean2 getBean2()
{
return new Bean2();
}
}
在配置文件applicationContext.xml中添加配置信息:
<!-- 2.静态工厂方式创建bean 用来自定义工厂,让Spring 工厂来调用自定义的工厂,
可以将对象的创建权限交给我们的工厂 -->
<bean id="bean2" class="com.igeek.Bean2" factory-method="getBean2"></bean>
在测试文件SpringTest.java 添加测试代码测试:
@Test
public void test2()
{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean2 = (Bean1) ac.getBean("bean2");
System.out.println(bean2);
}
3.工厂方法模式实例化bean
在src文件下创建Bean3.java,Bean3Factory.java
public class Bean3 {
public Bean3() {
super();
// TODO Auto-generated constructor stub
System.out.println("Bean3 创建构造方法!");
}
}
public class Bean3Factory {
public Bean3Factory() {
super();
// TODO Auto-generated constructor stub
System.out.println("Bean3Factory 构造方法调用!");
}
public Bean3 getBean3()
{
System.out.println("factory bean3 方法调用!");
return new Bean3();
}
}
在配置文件applicationContexxt.xml配置:
<!-- 3.实例化工厂的方式实例化bean -->
<bean id="bean3Factory" class="com.igeek.Bean3Factory"></bean>
<!-- 引用bean对象 -->
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3" ></bean>
在测试文件SpringTest.java 测试代码
@Test
public void test3()
{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean3 bean3 = (Bean3) ac.getBean("bean3");
System.out.println(bean3);
}
4. FactoryBean接口实现
在src目录下创建Bean4.java,FactoryBean4.java
public class Bean4 {
}
public class FactoryBean4 implements FactoryBean<Bean4>{
@Override
public Bean4 getObject() throws Exception {
// TODO Auto-generated method stub
//可以写一些初始化数据
return new Bean4();
}
/***
* 返回类型
*/
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return false;
}
}
在配置文件applicationContext.xml中添加配置信息:
<!-- 4.实现接口 FatoryBean(框架底层调用较常见)
spring 在准备实例化bean的时候,new FactoryBean4 ,没有急着返回bean对象。
会判断,类型对象是否实现了FactoryBean接口,如果实现了,就调用接口的getObject()方法
得到Bean的实列,返回bean对象
面试题:
beanfactory 和factoryBean有何区别:
beanfactory是找我们配置文件的底层接口
factorybean作为bean的生成工具,它是用来获取bean的
-->
<bean id="bean4" class="com.igeek.FactoryBean4"></bean>
在测试类SpringTest.java中添加类的测试:
@Test
public void test4()
{
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean4 bean4 = (Bean4) ac.getBean("bean4");
System.out.println(bean4);
}