0x01 自动扫描的含义
Spring利用IOC容器将所有的Bean有秩序的进行管理维护除了传统的xml文件中创建Bean在Spring2.5之后,有更方便的方式创建Bean,就是自动扫描,基于注解的开发模式这大大减少了程序员在配置XML文件上的时间,使得配置文件显得干净,整洁,便于维护
0x02 注解基础小知识
// 对于不同的模块或者组件,一般需要不同的注解// 这些Bean必须要有相应的注解才行,以下就是常用的几个注解// 知道就行是干嘛用的就行@Service 用于业务层@Controller 用于控制层@Repository 用于数据访问层@Component 用于其他
0x03 小例子
# 目录结构├── src│ └── main│ └── java│ └── com│ └── test│ ├── ...│ ├── IUserDao.java│ ├── IUserDaoImpl.java│ └── UserServlet.java│ └── resources│ └── applicationContext.xml│ └── test│ └── java│ ├── ...│ └── Test7.java
// 第一步// 修改applicationContext.xml,如果没有就自己创建// 文件名可以任取,不过一般这个文件名都叫applicationContext.xml// 在Spring的配置文件applicationContext.xml头部,引入context命名空间// 目录: ./SpringDemo/src/main/resources/// 文件名: applicationContext.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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> </beans>
// 第二步// 在applicationContext.xml中添加配置扫描所在包下(这里为扫描com.test包)所有注解// 目录: ./SpringDemo/src/main/resources/// 文件名: applicationContext.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 https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <!-- 配置自动扫描 --> <context:component-scan base-package="com.test"></context:component-scan></beans>
// 第三步// 目录: ./SpringDemo/src/main/java/com/test/// 文件名: IUserDao.javapackage com.test;public interface IUserDao { public void addUser(); public void delUser(); public void updateUser(); public void queryUser();}
// 第四步// 目录: ./SpringDemo/src/main/java/com/test/// 文件名: IUserDaoImpl.javapackage com.test;import org.springframework.stereotype.Repository;/** * 数据库访问层 */@Repositorypublic class IUserDaoImpl implements IUserDao { @Override public void addUser() { System.out.println("addUser方法执行了"); } @Override public void delUser() { System.out.println("delUser方法执行了"); } @Override public void updateUser() { System.out.println("updateUser方法执行了"); } @Override public void queryUser() { System.out.println("selectUser方法执行了"); }}
// 第五步// 目录: ./SpringDemo/src/main/java/com/test/// 文件名: UserServlet.javapackage com.test;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import javax.annotation.Resource;/** * 控制层 * 注: 如果不指定名称, 则默认就是类名的首字母的小写,也就是userServlet */@Controller("userServlet")/** * 设置bean的作用域范围为prototype */@Scope("prototype")public class UserServlet { @Resource private IUserDao dao; public void doGet() { dao.addUser(); dao.delUser(); dao.updateUser(); dao.queryUser(); }}
// 第六步// 创建一个测试类Test7进行测试// 目录: ./SpringDemo/src/test/java/// 文件名: Test7.javaimport com.test.UserServlet;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;// 测试使用注解进行bean的管理public class Test7 { public static void main(String[] args) { ApplicationContext context = new FileSystemXmlApplicationContext("src/main/resources/applicationContext.xml"); UserServlet obj = (UserServlet) context.getBean("userServlet"); obj.doGet(); }}// 运行结果addUser方法执行了delUser方法执行了updateUser方法执行了selectUser方法执行了