1:为什么需要扫描器
实际开发中,bean数量庞大,采用手动装配bean的方式无法满足生产,spring提供了扫描方式,对扫描的bean对象统一管理,简化开发配置,提高开发效率。
2:Spring扫描器配置
- 引入context
- 开启自动扫描范围:如果bean对象未在此包内,即使添加注解也无法实例化。
<?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:p="http://www.springframework.org/schema/p"
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.xsd">
<!--开启注解驱动-->
<context:annotation-config/>
<!--声明扫描的包-->
<context:component-scan base-package=""/>
</beans>
3:SpringIOC扫描器使用
使用指定的注解(声明在类上) bean的id默认为类名首字母小写
-
Dao层:
@Repository -
Service层:
@Service -
Controller层:
@Controller -
任意类:
@Component
各层类:
//dao层注解
@Repository
public class UserDao {
public void test(){
System.out.println("UserDao");
}
}
//service层注解
@Service
public class UserService {
//自动装配
@Resource
private UserDao userDao;
public void test(){
userDao.test();
System.out.println("UserService");
}
}
//controller层
@Controller
public class UserController {
//自动装配
@Resource
private UserService userService;
//自动装配
@Resource
private OtherUser otherUser;
public void test(){
otherUser.test();
userService.test();
System.out.println("UserController");
}
}
//任意类
@Component
public class OtherUser {
public void test(){
System.out.println("OtherUser");
}
}
Test:
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
UserController uc= (UserController) context.getBean("userController");
uc.test();
/*
OtherUser
UserDao
UserService
UserController
*/
}