利用@Component注解来写spring注入的时候,可以不需要在bean.xml中定义bean标签而通过这一注解就可以实现注入,但是需要在bean.xml中增添一个声明(绿色字体):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<!-- 用component配置可以省去写bean配置,这样在程序运行时会找到有关的component注解进行注入 -->
<context:component-scan base-package="com.david"/>
</beans>
其中的base-package就是要告诉容器去com.david(自己可以定义)下所有包中的所有类中寻找写了@Component注解的类。
我们在测试的时候如果这么写
public void testAdd() throws Exception {
BeanFactory beanFactory = new ClassPathXmlApplicationContext("bean.xml");
UserService s = (UserService) beanFactory.getBean("userService");
User u = (User) beanFactory.getBean("u");
s.add(u);
}
那么容器就会去寻找命名为“userService”和“u”的组件,为了满足这种要求我们需要在相关类中这样写注解:
@Component("u")
public class User {....}
@Component("userService")
public class UserService {....}
找到之后就可以通过容器产生所需要的对象了。