之前提到在xml文件中,一个bean对应一个类,在MyTest中通过获取bean的方法来创建对象。现在介绍一个新的方法,通过使用注解@Component
来代替bean。
@Component
使用注解@Component
之前,先在xml文件中添加组件:1
<context:component-scan base-package="com.xliu.pojo"/>
意思为自动扫描路径com.xliu.pojo中所有的@Component
。
在pojo类前添加注解@Component
意思是告诉Spring,我是一个pojo类,请将我注册到容器中。
使用前
假设我们有一个pojo类User.java:1
2
3
4
5
6
7
8
9
10
11public class User {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在xml中注册的bean为:1
2
3<bean id="user" class="com.xliu.pojo.User">
<property name="name" value="xliu"/>
</bean>
MyTest:1
2
3
4
5public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) applicationContext.getBean("user");
System.out.println(user.name);
}
输出:1
xliu
使用后
User.java:1
2
3
4
5@Component
public class User {
@Value("xiaokeliu")
public String name;
}
@Component
表示组件,注册到Spring中,@Value
表示对属性name的赋值
applicationContext.xml:1
<context:component-scan base-package="com.xliu.pojo"/>
在xml文件中只需要这一行添加组件即可。
MyTest不变,结果输出:1
xiaokeliu
事实证明,虽然在xml文件中我们没有显式地注册bean,但还是可以通过getBean来创建对象。
衍生注解
@Component
有几个衍生注解,我们在web开发中,会按照MVC三层架构分层
- dao(@Repository)
- service(@Service)
- controller(@Controller)
功能和@Component
一样,都是代表这个类注册到Spring容器中,装配。
XML与注解最佳实践
XML用来管理bean,注解负责完成属性的注入。
那么XML文件中就只有一个一个<bean>
,而给属性赋值则通过注解(@Value)实现。