在Spring框架中,Bean是一个由Spring IoC容器实例化、配置和管理的对象。Bean是一个被Spring框架管理并且被应用程序各个部分所使用的对象。Spring IoC容器负责Bean的创建、初始化、依赖注入以及销毁等生命周期管理。
注:喜欢的朋友可以关注公众号“JAVA学习课堂”系统学习相关技术,持续更新。
目录
1、Bean的配置
Spring类似一个工厂,它的作用就是生产和管理容器中的Bean,Spring容器支持XML和Properties两种格式的配置文件,实际开发中通常使用XML的格式,来注册并管理Bean之间的依赖关系。
<Bean>元素的常用属性和子元素
注:
在配置文件中,一个普通的bean只需要定义id或者name和class两个属性。
<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">
<bean id="myBean" class="com.example.MyBeanClass">
<!-- 注入其他Bean、设置属性值等 -->
<property name="someProperty" value="someValue"/>
</bean>
<!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->
<bean id="bean1" class="com.itTest.Bean1" />
<!-- 使用name属性定义bean2,对应的实现类为com.itTest.Bean2 -->
<bean name="bean2" class="com.itTest.Bean21" />
</beans>
2.Bean的实例化
在程序中,要使用某个对象,就需要先实例化对象,在spring中,要使用容器中的bean,同样需要实例化bean。
实例化bean的三种方式:构造器实例化、静态工厂方式实例化、实例工厂方式。
构造器实例化:
public class Bean1 {
}
创建spring配置文件beans1.xml配置文件中定义id为bean1的bean
<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"
>
<!-- 使用id属性定义bean1,对应的实现类为com.itTest.Bean1 -->
<bean id="bean1" class="com.itTest.Bean1" />
</beans>
创建测试类:
public class InstanceTest1 {
public static void main(string [] args) {
//定义配置w摁键路径
string xmlPath = "xml的路径";
ApplicationContext applicationContext = new ClassPathXMlApplicationContext(xmlPath);
Bean1 bean = (Bean) applicationContext.getBean("bean1");
system.out.println(bean);
}
}
静态工厂方式实例化:该方法要求开发者创建一个静态工厂的方式来创建bean实例,在配置中class属性指定的不在是bean实例的实现类,而是静态工厂类。
创建一个bean2类:
public class Bean2 {
}
创建MyBean2Factory类,在该类中创建一个静态方法来返回bean2的实例:
public class MyBean2Factory {
//使用自己的工厂创建Bean2实例
public static Bean2 createBean(){
return new Bean2();
}
}
创建spring配置文件
<?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
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="bean2"
class="com.instance.static_factory.MyBean2Factory"
factory-method="createBean" />
</beans>
创建测试类:
public class InstanceTest2 {
public static void main(String[] args) {
// 定义配置文件路径
String xmlPath =
"com/instance/static_factory/beans2.xml";
// ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean2"));
}
}
实例工厂方式实例化:该方法采用直接创建bean实例的方式,在配置文件中需要实例化的bean也不是通过class属性直接指向的实例化类,在通过factory-bean属性指向配置的实例工厂,使用factory-mentod属性确定使用工厂中的哪个方法。
创建类对象:
public class MyBean3Factory {
public MyBean3Factory() {
System.out.println("bean3工厂实例化中");
}
//创建Bean3实例的方法
public Bean3 createBean(){
return new Bean3();
}
}
创建Spring配置文件bean3.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
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<!-- 配置工厂 -->
<bean id="myBean3Factory"
class="com.instance.factory.MyBean3Factory" />
<!-- 使用factory-bean属性指向配置的实例工厂,
使用factory-method属性确定使用工厂中的哪个方法-->
<bean id="bean3" factory-bean="myBean3Factory"
factory-method="createBean" />
</beans>
创建测试类:
public class InstanceTest3 {
public static void main(String[] args) {
// 指定配置文件路径
String xmlPath = "com/instance/factory/beans3.xml";
// ApplicationContext在加载配置文件时,对Bean进行实例化
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}