面的例子我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些这组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进spring容器中管理。它的作用和在xml文件中使用bean节点配置组件是一样的。要使用自动扫描机制,我们需要打开以下配置信息:
xmlns:xsi=""
xmlns:context=""
xsi:schemaLocation="
/spring-beans-2.5.xsd
/spring-context-2.5.xsd">
其中base-package为需要扫描的包(含子包)。
@Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action)、@Repository用于标注数据访问组件,即DAO组件。而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
<context:component-scan base-package="cn.itcast"/>
这个配置隐式注册了多个对注释进行解析处理的处理器也包括了它<context:annotation-config/>
自动扫描,
1、不用在配置文件那里写,但是最好在要用的bean上,加上@Service(“personService”)虽然默认是personService首字母变小写即为bean的id
2、记住那些依赖Bean在哪里注入,也还是要加上Resource等标记
3、切面也是一个bean
,后面的切面编程,也是可以纳入自动管理的或者基于xml方式
beans文件配置
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns=""
- xmlns:xsi=""
- xmlns:context=""
- xsi:schemaLocation="
- /spring-beans-2.5.xsd
- /spring-context-2.5.xsd">
-
- <context:component-scan base-package="cn.itcast"/>
- </beans>
- package cn.itcast.dao.impl;
- import org.springframework.stereotype.Repository;
- import cn.itcast.dao.PersonDao;
- @Repository("personDao")
- public class PersonDaoBean implements PersonDao {
- public void add(){
- System.out.println("执行PersonDaoBean中的add()方法");
- }
- }
- package cn.itcast.service.impl;
- import javax.annotation.PostConstruct;
- import javax.annotation.PreDestroy;
- import javax.annotation.Resource;
- import org.springframework.stereotype.Service;
- import cn.itcast.dao.PersonDao;
- import cn.itcast.service.PersonService;
- @Service("personService")
- public class PersonServiceBean implements PersonService {
- //@Autowired(required=false) @Qualifier("personDaoxxxx")
-
- @Resource(name="personDao")
- private PersonDao personDao;
-
- public void save(){
- personDao.add();
- }
- }
- package junit.test;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import org.springframework.context.support.AbstractApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import cn.itcast.service.PersonService;
- public class SpringTest {
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- }
- @Test public void instanceSpring(){
- AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
- PersonService personService = (PersonService)ctx.getBean("personService");
- personService.save();
- ctx.close();
-
- }
- }
输出:
- log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
- log4j:WARN Please initialize the log4j system properly.
- 执行PersonDaoBean中的add()方法
阅读(1008) | 评论(0) | 转发(0) |