在spring容器内拼凑bean叫作装配。装配bean的时候,你是在告诉容器,需要哪些bean,以及容器如何使用依赖注入将它们配合在一起。
理论上,bean装配可以从任何资源获得,包括属性文件,关系数据库等,但xml是最常见的spring 应用系统配置源。Spring中的几种容器都支持使用xml装配bean,包括:
XmlBeanFactory ,
ClassPathXmlApplicationContext ,
FileSystemXmlApplicationContext ,
XmlWebApplicationContext
基本的xml配置包括如下几个方面:
1.添加一个bean
2.设置bean的属性
2.1 手动设置
2.1.1 通过Setter方法
2.1.2 通过构造器
2.2 自动设置
其中bean的属性即为bean里的成员变量,这些成员变量值的获得可以通过setter方法,例如某个属性为name,则setter方法为
setName(String
name);或者通过构造器在类被实例化时初始化。Setter方法(例如setName方法)或者构造器的调用都可以通过在xml文件里进行配置,从而
实现让spring容器来自动进行。
1.添加一个bean
以下是一个例子:
<bean
id = “mybean”
Class = “blog.spring.MyBean”
Singleton = “false”
init-method = “initMethod”
destroy-method = “destroyMethod”
autowire = “autowire type”
/>
下面是对该标签里各个属性的解释:
Id : 标识该bean的名称,通过factory.getBean(“id”)来获得实例。
Class : 该bean的类路径。
Singleton : 默认为true,即单实例模式,每次getBean(“id”)时获取的都是同
一个实例,如果设置为false,即原型模式,则每次获取的是新创建
的实例。
Init-method : 在bean实例化后要调用的方法(bean里定义好的方法)。
Destroy-method : bean从容器里删除之前要调用的方法。
Autowire : 其属性要通过何种方法进行属性的自动装配。
对于上述的各个属性,id和class是必要的,其他的则可以省略。例如如果设置了autowire的值,则表明需要自动装配,否则是手动装配。
2.通过Setter方法手动设置bean里的属性
Bean里的属性通过<property>标签来标识。有以下几种情况:
● 简单类型属性
<bean id = “mybean” class = “blog.spring.MyBean”>
<property name = “name”>
<value>springTest</value>
</property>
</bean>
● 引用其他bean
<bean id = “mybean” class = “blog.spring.MyBean” />
<bean id = “mybean1” class = “blog.spring.MyBean1”>
<property name = “name”>
<ref bean = “mybean” />
</property>
</bean>
也可以将<ref>改为
<bean class = “..”>
这样叫做内部bean,缺点是无法在其他地方重用这个bean的实例。
● 装配集合
共有以下几种集合的装配:
****装配List和数组****
<property name = ”nameList”>
<list>
<value>something</value>
<ref bean = “blog.spring.MyBean” />
<value>otherThing</value>
</list>
</property>
****装配Set****
<property name = ”nameList”>
<set>
<value>something</value>
<ref bean = “blog.spring.MyBean” />
<value>otherThing</value>
</set>
</property>
****装配Map****
<property name = ”nameList”>
<map>
<entry key = “key1”>
<value>value1</value>
</entry>
<entry key = “key2”>
<ref bean = “mybean” />
</entry>
</map>
</property>
****装配Properties****
<property name = ”nameList”>
<props>
<prop key = “prop1”>value1</prop>
<prop key = “prop2”>value2</prop>
</props>
</property>
● 设置null
要将一个属性null,需要通过<null />标签,如果不设置,则属性为默认值(在实例化时)而不是null。
<property name=”name”> <null /> </property>
3.通过构造器手动设置bean里的属性
假设有如下一个bean:
Public class MyBean {
Public MyBean( String arg1, MyBean1 arg2, String arg3 )
}
则可以在xml里这样配置该bean:
<bean id = “mybean” class = “blog.spring.MyBean”>
<constructor-arg index = “1”>
<value>springTest</value>
<constructor-arg>
<constructor-arg index = “0”>
<ref bean = “mybean1” />
<constructor-arg>
</bean>
其中的index是用来标识该参数在构造函数里的位置的,并从0开始。
4.让spring完成自动装配
例如:
<bean
id = “mybean”
class = “blog.spring.MyBean”
autowire = “autowire type”
/>
下面是几种autowire type的说明:
● byname : 试图在容器中寻找和需要自动装配的属性名相同的bean或id,如果没有找到相应的bean,则这个属性未被装配上。
● byType : 试图在容器中寻找一个与需要自动装配的属性类型相同的bean或id,如果没有找到,则该属性未被装配上。
● constructor : 试图在容器中寻找与需要自动装配的bean的构造函数参数一致的一个或多个bean,如果没找到则抛出异常。
● autodetect : 首先尝试使用constructor来自动装配,然后再使用byType方式。
从
上面可以看出,如果某个bean不手动设置autowire属性,则默认为手动装配。如果需要将所有bean都设置为自动装配时,可以通过
在<beans>标签中设置default-autowire属性。<beans>标签是整个xml文档的根,在它下面就是一个
个的<bean>。
其中default-autowire的值也有byName,byType,constructor,autodetect四种。
例如配置如下:
<beans default-autowire = “byName”>
...
</beans>
自动装配可能带来不确定性问题。例如使用byType时可能同时发现两个相同的类型,则不知道该采用哪一个。所以可能混合采用自动和手动装配。例如,对某个bean设置为自动装配,而对其某个属性则手动明确的设置其值,例如:
<bean id = “mybean” class = “blog.spring.MyBean”
Autowire = “byType”
>
<property name = “name”>
<ref bean = “myBean1”>
</property>
</bean>
通过这样的配置,对mybean里的name属性进行手动装配,而对除name外的其他属性就进行自动装配。
相关推荐
- **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...
`@Component`注解的类会自动被Spring扫描并注册为Bean,而`@Configuration`类则提供了更高级别的配置方式,可以替代XML配置文件。 此外,Spring提供了一种名为BeanPostProcessor的接口,它允许我们自定义Bean实例化...
Spring支持多种配置方式,包括XML、Java配置类(@Configuration)、注解(@Component、@Service等)以及通过@ConfigurationProperties处理YAML或Properties文件。在实验小例子中,我们可能看到这几种配置方式的组合...
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象。Spring通过IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)来管理这些Bean。在这个"Spring Bean简单应用实例"中,我们将...
在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、作用域等属性。这个阶段不涉及Bean的实际实例化,而是构建Bean的元数据。 2. **Bean实例化** 实例化是...
在本篇中,我们将深入探讨"Spring中的Bean"这一主题,包括Bean的定义、配置以及如何在实际应用中使用。 首先,我们需要理解什么是Spring中的Bean。在Spring中,Bean通常代表应用程序中的一个对象,这些对象由Spring...
- **通过`@Configuration`和`@ComponentScan`**:Spring 3.0引入了基于Java的配置,允许在Java类中定义Bean并扫描特定包下的组件。 - **使用`Prototype`作用域的Bean**:如果一个Bean是Prototype作用域,每次请求...
在Spring框架中,XML配置是传统且广泛使用的方式来设置应用的组件和行为,包括实现定时任务。定时任务在软件开发中扮演着重要角色,它允许应用程序在预设的时间执行特定的任务,例如数据清理、日志归档或者发送通知...
在Spring框架中,管理Bean的方式主要有三种:XML配置、注解配置和Java配置。下面将详细介绍这三种方式以及Spring的自动注入机制。 1. **基于XML的Bean定义**: 在XML配置中,我们通常在`applicationContext.xml`...
- **Java 配置**:使用 `@Configuration` 和 `@Bean` 注解在 Java 类中定义 Bean。 - **自动扫描组件**:Spring 可以自动发现并注册带有特定注解(如 `@Component`)的类。 6. **实例化与初始化**: - **实例化*...
- 定义:Spring Bean是被Spring容器管理的对象,它们通过XML、Java注解或Java配置类进行声明。 - 初始化:Spring容器在创建Bean实例时,会执行初始化过程,包括实例化、属性设置(通过setter方法或构造函数注入)...
首先,Spring的注解主要分为三类:配置注解(如@Configuration)、元数据注解(如@Component、@Service、@Repository和@Controller)和注入注解(如@Autowired、@Value)。这些注解使得我们可以在不编写XML配置的...
在Spring框架中,Bean是核心概念,它是Spring管理的对象,通常代表了应用程序中的业务对象或服务。本示例将深入探讨如何在Spring中创建和管理Bean。首先,我们需要理解Spring的IoC(Inversion of Control,控制反转...
"spring和Mybatis的xml配置文件提示约束包"这个主题,主要是关于在XML配置文件中使用的DTD(Document Type Definition)文档类型定义,它为XML文件提供了结构约束和语法规范。 DTD是一种元语言,用于定义XML文档的...
Spring通过XML配置、注解配置或Java配置三种方式来定义Bean,并进行加载。接下来,我们将详细探讨Spring Bean加载的过程及其相关知识点。 1. **Bean定义**: - XML配置:在`src`目录下的XML配置文件(如`beans.xml...
在Spring框架中,自动扫描和管理Bean是一种便捷的方式,它允许开发者无需显式地在配置文件中声明每个Bean,而是让Spring容器自动发现并管理应用中的组件。这一特性极大地简化了Spring应用的配置,提高了开发效率。...
`@Configuration`类表示这是一个配置类,`@Bean`注解方法表示该方法的返回值将作为一个Bean注册到Spring容器。 ```java @Configuration public class AppConfig { @Bean public HelloWorldService ...
3. **`@Configuration`与`@ComponentScan`**:`@Configuration`注解标记一个类为配置类,它替代了传统的XML配置。`@ComponentScan`注解用于指定需要进行Bean扫描的包路径,可以包含多个包,并且可以过滤特定的注解。...
Spring容器通过XML、Java配置或者基于注解的方式管理Bean的生命周期,包括创建、初始化、使用和销毁。 2. **XML配置Bean** 在传统的Spring应用中,我们通常使用XML文件来定义Bean。例如: ```xml <bean id=...
Spring通过`@Configuration`和`@Bean`注解,可以将XML配置转换为Java配置类。例如: ```java @Configuration public class AppConfig { @Bean("repository") public MyRepository myRepository() { return new ...