bean的注解配置
前面通过示例已经看到,从Spring的2.5版本之后不但引入了p命名空间来简化xml,而且还开始支持注解的配置方式,几乎消灭了配置文件。需要实例化的类不需要再在配置文件中一个一个的进行配置,而是Spring通过扫描指定的位置,来自动的配置管理bean。接下来创建以下类,来感受注解配置方式的好处。
Person类:具有自我介绍方法
package com.me.spring;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class Person {
@Autowired
private Computer computer; // 电脑
private String name; // 姓名
private int age; // 年龄
/**
* 自我介绍
* */
public void introduce(){
System.out.println("我叫"+name+",今年"+age+"岁,有一台"+computer.getColor()+computer.getType());
}
// getter and setter......
}
Computer类:
package com.me.spring;
import org.springframework.stereotype.Repository;
@Repository
public class Computer {
private String type; // 电脑品牌
private String color; // 颜色
// getter and setter......
}
要实现Person类的自我介绍,按照传统的配置方式,要先进行如下配置:
<bean id="person" class="com.me.spring.Person">
<property name="name" value="Kim"></property>
<property name="age" value="22"></property>
<property name="computer" ref="computer"></property>
</bean>
<bean id="computer" class="com.me.spring.Computer">
<property name="type" value="联想电脑"></property>
<property name="color" value="黑色"></property>
</bean>
运行测试,结果:
我叫Kim,今年22岁,有一台黑色联想电脑
这样有一大堆的配置,现在我们要使用扫描注解方式,可以把这些配置都去掉了,只需要再配置文件中添加一行扫描配置即可,如下:
<context:component-scan base-package="com.me.spring"></context:component-scan>
注:base-package即为扫描的包路径,也可使用通配符的方式扩大扫描范围,如:com.me.*
前面创建类,已经加上注解:
- @Repository:将该类bean的创建配置和管理交由SpringIOC容器;
- @Autowired:将依赖的bean自动装配到对应的bean,建立关系,例子中把Computer类的bean自动装配到有引用关系的Person类的bean中;
测试一下:
Person person = (Person)context.getBean("person");
person.setName("Kim");
person.setAge(22);
Computer computer = (Computer)context.getBean("computer");
computer.setType("苹果电脑");
computer.setColor("银白色");
person.introduce();
运行结果:
我叫Kim,今年22岁,有一台银白色苹果电脑
其中,Spring在扫描创建bean的时候,名称默认以类名的首字母小写定义,所以获取的时候就使用类名的首字母小写获取。
从上面的例子可以看出,注解配置方式大大简化了配置文件,所有的配置浓缩为一行配置。不过对于注解配置的内容,远远不止这些,这里只是示范了实际中使用最频繁的,其他未涉及部分,还需深入了解!