Spring IOC 扫描器

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...

猜你喜欢

转载自blog.csdn.net/lln1540295459/article/details/121109897