Spring Note 7: @component

之前提到在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
11
public 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
5
public 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)实现。