1、定义两个具有组合关系的Bean组件类,在applicationContext.xml中添加定义。 2、掌握如何获取Spring容器及获取对象。 3、单例模式与多例模式的创建及使用。 4、使用注解,给容器中注入组件。
时间: 2024-03-11 18:46:41 浏览: 124
好的,我将为您提供一个完整的示例来说明如何完成这些任务。
1. 定义两个具有组合关系的Bean组件类,在applicationContext.xml中添加定义
假设我们有两个类:`Person`和`Address`。一个人可以有一个地址,因此`Person`和`Address`之间具有组合关系。我们可以在`applicationContext.xml`文件中定义这两个类:
```xml
<bean id="address" class="com.example.Address">
<property name="street" value="123 Main St" />
<property name="city" value="Anytown" />
<property name="state" value="CA" />
<property name="zip" value="12345" />
</bean>
<bean id="person" class="com.example.Person">
<property name="name" value="John Doe" />
<property name="age" value="30" />
<property name="address" ref="address" />
</bean>
```
2. 获取Spring容器及获取对象
要获取Spring容器,我们可以使用`ClassPathXmlApplicationContext`类。假设我们已经定义了上述的`Person`和`Address`类,我们可以这样获取`person`对象:
```java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) context.getBean("person");
System.out.println(person.getName()); // Output: John Doe
}
}
```
3. 单例模式与多例模式的创建及使用
在Spring中,默认情况下,所有的Bean都是单例的。这意味着在整个应用程序中,只有一个实例被创建,并且在每次请求时返回相同的实例。如果您需要创建多个实例,您可以将它们设置为多例。
下面是一个示例,演示如何在Spring中创建单例和多例Bean:
```xml
<!-- 单例Bean -->
<bean id="person" class="com.example.Person" scope="singleton">
<property name="name" value="John Doe" />
<property name="age" value="30" />
</bean>
<!-- 多例Bean -->
<bean id="person" class="com.example.Person" scope="prototype">
<property name="name" value="John Doe" />
<property name="age" value="30" />
</bean>
```
在上述示例中,我们设置了`person` Bean的作用域。`singleton`表示单例,`prototype`表示多例。要使用这些Bean,我们可以像这样获取它们:
```java
// 获取单例Bean
Person person1 = (Person) context.getBean("person");
Person person2 = (Person) context.getBean("person");
System.out.println(person1 == person2); // Output: true
// 获取多例Bean
Person person1 = (Person) context.getBean("person");
Person person2 = (Person) context.getBean("person");
System.out.println(person1 == person2); // Output: false
```
在上述示例中,我们使用`==`运算符比较两个对象的引用。如果它们相等,那么它们是同一个实例。
4. 使用注解,给容器中注入组件
Spring提供了几个注解,可以用来在容器中注入组件。下面是一些常用的注解:
- `@Component`:用于标记一个类为组件(Bean)。
- `@Autowired`:用于自动装配依赖关系。
- `@Qualifier`:用于指定依赖关系的名称。
- `@Value`:用于注入简单值,如字符串和数字。
下面是一个示例,演示如何使用注解来注入组件:
```java
@Component
public class Person {
private String name;
private int age;
@Autowired
@Qualifier("address")
private Address address;
// 省略getter和setter方法
}
@Component
public class Address {
private String street;
private String city;
private String state;
private String zip;
// 省略getter和setter方法
}
```
在上述示例中,我们使用`@Component`注解来标记`Person`和`Address`类为组件。在`Person`类中,我们使用`@Autowired`和`@Qualifier`注解来自动装配`Address`依赖关系,并指定`address` Bean的名称。
阅读全文