0x01 自动扫描的含义

  1. Spring利用IOC容器将所有的Bean有秩序的进行管理维护
  2. 除了传统的xml文件中创建Bean
  3. Spring2.5之后,有更方便的方式创建Bean,就是自动扫描,基于注解的开发模式
  4. 这大大减少了程序员在配置XML文件上的时间,使得配置文件显得干净,整洁,便于维护

0x02 注解基础小知识

  1. // 对于不同的模块或者组件,一般需要不同的注解
  2. // 这些Bean必须要有相应的注解才行,以下就是常用的几个注解
  3. // 知道就行是干嘛用的就行
  4. @Service 用于业务层
  5. @Controller 用于控制层
  6. @Repository 用于数据访问层
  7. @Component 用于其他

0x03 小例子

  1. # 目录结构
  2. ├── src
  3. └── main
  4. └── java
  5. └── com
  6. └── test
  7. ├── ...
  8. ├── IUserDao.java
  9. ├── IUserDaoImpl.java
  10. └── UserServlet.java
  11. └── resources
  12. └── applicationContext.xml
  13. └── test
  14. └── java
  15. ├── ...
  16. └── Test7.java
  1. // 第一步
  2. // 修改applicationContext.xml,如果没有就自己创建
  3. // 文件名可以任取,不过一般这个文件名都叫applicationContext.xml
  4. // 在Spring的配置文件applicationContext.xml头部,引入context命名空间
  5. // 目录: ./SpringDemo/src/main/resources/
  6. // 文件名: applicationContext.xml
  7. <?xml version="1.0" encoding="UTF-8"?>
  8. <beans xmlns="http://www.springframework.org/schema/beans"
  9. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  10. xmlns:context="http://www.springframework.org/schema/context"
  11. xsi:schemaLocation="http://www.springframework.org/schema/beans
  12. https://www.springframework.org/schema/beans/spring-beans.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-4.2.xsd">
  15. </beans>
  1. // 第二步
  2. // 在applicationContext.xml中添加配置扫描所在包下(这里为扫描com.test包)所有注解
  3. // 目录: ./SpringDemo/src/main/resources/
  4. // 文件名: applicationContext.xml
  5. <?xml version="1.0" encoding="UTF-8"?>
  6. <beans xmlns="http://www.springframework.org/schema/beans"
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  8. xmlns:context="http://www.springframework.org/schema/context"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. https://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context-4.2.xsd">
  13. <!-- 配置自动扫描 -->
  14. <context:component-scan base-package="com.test"></context:component-scan>
  15. </beans>
  1. // 第三步
  2. // 目录: ./SpringDemo/src/main/java/com/test/
  3. // 文件名: IUserDao.java
  4. package com.test;
  5. public interface IUserDao {
  6. public void addUser();
  7. public void delUser();
  8. public void updateUser();
  9. public void queryUser();
  10. }
  1. // 第四步
  2. // 目录: ./SpringDemo/src/main/java/com/test/
  3. // 文件名: IUserDaoImpl.java
  4. package com.test;
  5. import org.springframework.stereotype.Repository;
  6. /**
  7. * 数据库访问层
  8. */
  9. @Repository
  10. public class IUserDaoImpl implements IUserDao {
  11. @Override
  12. public void addUser() {
  13. System.out.println("addUser方法执行了");
  14. }
  15. @Override
  16. public void delUser() {
  17. System.out.println("delUser方法执行了");
  18. }
  19. @Override
  20. public void updateUser() {
  21. System.out.println("updateUser方法执行了");
  22. }
  23. @Override
  24. public void queryUser() {
  25. System.out.println("selectUser方法执行了");
  26. }
  27. }
  1. // 第五步
  2. // 目录: ./SpringDemo/src/main/java/com/test/
  3. // 文件名: UserServlet.java
  4. package com.test;
  5. import org.springframework.context.annotation.Scope;
  6. import org.springframework.stereotype.Controller;
  7. import javax.annotation.Resource;
  8. /**
  9. * 控制层
  10. * 注: 如果不指定名称, 则默认就是类名的首字母的小写,也就是userServlet
  11. */
  12. @Controller("userServlet")
  13. /**
  14. * 设置bean的作用域范围为prototype
  15. */
  16. @Scope("prototype")
  17. public class UserServlet {
  18. @Resource
  19. private IUserDao dao;
  20. public void doGet() {
  21. dao.addUser();
  22. dao.delUser();
  23. dao.updateUser();
  24. dao.queryUser();
  25. }
  26. }
  1. // 第六步
  2. // 创建一个测试类Test7进行测试
  3. // 目录: ./SpringDemo/src/test/java/
  4. // 文件名: Test7.java
  5. import com.test.UserServlet;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.FileSystemXmlApplicationContext;
  8. // 测试使用注解进行bean的管理
  9. public class Test7 {
  10. public static void main(String[] args) {
  11. ApplicationContext context = new FileSystemXmlApplicationContext("src/main/resources/applicationContext.xml");
  12. UserServlet obj = (UserServlet) context.getBean("userServlet");
  13. obj.doGet();
  14. }
  15. }
  16. // 运行结果
  17. addUser方法执行了
  18. delUser方法执行了
  19. updateUser方法执行了
  20. selectUser方法执行了