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.java
package com.test;
public interface IUserDao {
public void addUser();
public void delUser();
public void updateUser();
public void queryUser();
}
// 第四步
// 目录: ./SpringDemo/src/main/java/com/test/
// 文件名: IUserDaoImpl.java
package com.test;
import org.springframework.stereotype.Repository;
/**
* 数据库访问层
*/
@Repository
public 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.java
package 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.java
import 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方法执行了