当谈到Spring框架时,“bean”一定是其中最重要的概念之一。Bean是指一个由Spring容器中管理的对象,可以是任何类的实例,通常表示应用程序的业务逻辑或实现。在Spring中,Bean是通过IoC(Inversion of Control)技术实现的。
什么是Bean?
Bean是Spring中的一个组件,是管理对象以及自动装配的基本单元。Bean是由Spring容器创建、装配和管理的对象,其定义基于Java类。对于Java类,只需增加一些注解或XML配置文件信息即可使其成为Spring Bean。
Bean的创建方式
Spring容器创建Bean实例有两种方式:一种是使用默认的构造函数创建Bean实例,另一种是通过提供工厂方法来创建Bean实例。
通过默认构造函数创建Bean实例
默认构造函数是指没有参数的构造函数,无任何参数的构造函数是Java类默认的构造函数。Spring使用默认的构造函数创建Bean,对象的属性值通过setter注入或者属性注入实现。
使用Java配置的方式,示例代码如下:
@Configuration
public class AppConfig{
@Bean
public MyService myService(){
MyService myService = new MyService();
myService.setRepository(new MyRepository());
return myService;
}
}
使用XML配置文件的方式,示例代码如下:
<bean id="myService" class="com.xx.MyService">
<property name="repository" ref="myRepository"/>
</bean>
通过工厂方法创建Bean实例
工厂方法是由工厂类中的静态方法创建对象。工厂类可以用于创建不同对象的不同实例,类似于工厂生产不同产品,对于不同的产品有不同的生产方法。
使用Java配置的方式,示例代码如下:
@Configuration
public class AppConfig{
@Bean
public static MyService myService(){
MyService myService = new MyService();
myService.setRepository(myRepository());
return myService;
}
@Bean
public static MyRepository myRepository(){
return new MyRepository();
}
}
使用XML配置文件的方式,示例代码如下:
<bean id="myService" class="com.xx.MyService" factory-method="myService">
<property name="repository" ref="myRepository"/>
</bean>
<bean id="myRepository" class="com.xx.MyRepository" factory-method="myRepository"/>
Bean的作用域
Bean的作用域定义Bean实例在Spring容器中的生命周期。Spring框架提供了五种作用域:
-
Singleton:默认作用域,保证整个应用程序中只有一个Bean实例,Bean实例存在于Spring容器中,使用XML配置文件时可以将scope属性值设置为singleton或者不设置,默认是singleton。
-
Prototype:每次都会创建一个新的Bean实例,对于Bean实例的引用是无法共享的。
-
Session:在Web应用程序中,容器创建一个Bean实例,该实例绑定到HTTP session的有效期内,只有Web应用程序中有状态的Bean才会使用该作用域。
-
Request:在Web应用程序中,容器创建一个Bean实例,该实例绑定到HTTP request上下文的有效期内。
-
Global Session:在基于portlet的Web应用程序中,容器创建一个Bean实例,该实例绑定到portlet session的有效期内。
一个Bean的作用域需要在定义时进行配置,示例代码如下:
使用XML配置文件的方式,根据需求在bean节点中设置scope属性的值即可
<bean id="myService" class="com.xx.MyService" scope="prototype"/>
使用Java配置的方式,需要在@Bean注解中设置对应的作用域,示例代码如下:
@Configuration
public class AppConfig{
@Bean
@Scope("prototype")
public MyService myService(){
MyService myService = new MyService();
myService.setRepository(new MyRepository());
return myService;
}
}
以上是“Spring中的bean概念介绍”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring中的bean概念介绍 - Python技术站