- 什么是Bean
Spring就是一个大工厂,Bean就是Spring容器中需要加工生产的部分。
我们都在微博上@过某某,对方会优先看到这条信息,并给你反馈,那么在Spring中,你标识一个@符号,那么Spring就会来看看,并且从这里拿到一个Bean(注册)或者给出一个Bean(使用)
- Bean的实例化
想要用这个对象,就先要实例化这个对象。想要用Spring容器中的Bean,就要先实例化这个Bean。
实例化Bean有三种方法,构造器实例化,静态工厂方式实例化,实例工厂实例化。 - 构造器实例化
创建一个类bean1,并在配置文件(xml)中定义这个Bean。
创建测试类InstanceTest,在此类下测试构造早期是否能实例化Bean。
public class InstanceTest1 {
public static void main(String[] args) {
String xmlPath = "com/woongcha/instance/constructer/beans1.xml";
//ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(xmlPath);
Bean1 bean=(Bean1) applicationContext.getBean("bean1");
System.out.println(bean);
}
}
测试类中先加载配置文件时,对Bean进行实例化。Spring会通过id为bean1的类中默认的无参构造方法进行实例化。
- 静态工厂方式实例化
与构造器实例化不同的是,构造工厂方式实例化在配置时class属性时,不再是Bean的实现类,而是静态工厂类,还需要factory-method属性来指定所创建的静态工厂方法。
<bean id="bean2"
class="com.woongcha.instance.static_factory.MyBean2Factory"
factory-method="createBean">
</bean>
public class InstanceTest2 {
public static void main(String[] args) {
String xmlPath = "com/woongcha/instance/static_factory/beans2.xml";
//ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean2"));
}
}
- 实例工厂方式实例化
不再采用静态方法创建Bean实例,而是采用直接创建Bean实例的方式。还需要factory-bean属性来确定使用工厂中的哪个方法。
<bean id="myBean3Factory"
class="com.woongcha.instance.static_factory.MyBean3Factory">
</bean>
<bean id="bean3" factory-bean="myBean3Factory"
factory-method="createBean">
</bean>
</beans>
public class InstanceTest3 {
public static void main(String[] args) {
String xmlPath = "com/woongcha/instance/static_factory/beans3.xml";
//ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}