Spring IOC 扫描器
实际的开发中,bean的数量⾮常多,采⽤⼿动配置bean的⽅式已⽆法满⾜⽣产需要,Spring这时候同样提供了扫描的⽅式,对扫描到的bean对象统⼀进⾏管理,简化开发配置,提⾼开发效率。
Spring IOC 扫描器
作⽤:bean对象统⼀进⾏管理,简化开发配置,提⾼开发效率
1、设置⾃动化扫描的范围
如果bean对象未在指定包范围,即使声明了注解,也⽆法实例化
2、使⽤指定的注解(声明在类级别) bean对象的id属性默认是 类的⾸字⺟⼩写
Dao层:
@Repository
Service层:
@Service
Controller层:
@Controller
任意类:
@Component
注:开发过程中建议按照指定规则声明注解
设置自动化扫描的范围
<?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.xsd">
<!-- 设置⾃动化扫描的范围 -->
<context:component-scan base-package="com.xxxx"/>
</beans>
使用特定的注解
@Repository (Dao层)
package com.xxxx.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDao {
public void test(){
System.out.println("UserDao...");
}
}
@Service(Service层 )
package com.xxxx.service;
import com.xxxx.dao.UserDao;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class UserService {
//自动注入
@Resource
private UserDao userDao;
public void test(){
System.out.println("UserService...");
userDao.test();
}
}
@Controller (Controller 层 )
package com.xxxx.controller;
import com.xxxx.service.UserService;
import com.xxxx.util.TestUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller
public class UserController {
//自动注入
@Autowired
public UserService userService;
@Resource
private TestUtil testUtil;
public void test(){
System.out.println("UserController...");
userService.test();
testUtil.test();
}
}
@Component (任意层)
package com.xxxx.util;
import org.springframework.stereotype.Component;
@Component
public class TestUtil {
public void test(){
System.out.println("TestUtil...");
}
}
测试
package com.xxxx;
import com.xxxx.controller.UserController;
import com.xxxx.service.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Starter {
public static void main(String[] args) {
BeanFactory factory = new ClassPathXmlApplicationContext("spring.xml");
UserController userController = (UserController) factory.getBean("userController");
userController.test();
}
}
测试结果
UserController...
UserService...
UserDao...
TestUtil...