基于注解方式 Ioc配置

spring-o1.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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--
        1、普通配置扫描
            a. base-package 指定Ioc容器去哪些包下查找注解类,让后将这些注解类放到Ioc容器;
            b. 可以指定一个或多个包,包之间用逗号隔开,如:com.atguigu.ioc_01,com.atguigu.ioc_02,...
            c. 会扫描包的所有子包哦
     -->
    <context:component-scan base-package="com.atguigu.ioc_01"/>


    <!--
        2、指定包,但是排除注解
            如果你依然用这些包,就会报错:
                org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.atguigu.ioc_01.XxxDao' available
    -->
    <context:component-scan base-package="com.atguigu.ioc_01">
        <!-- 排除包下面的 Repository注解 和  Controller注解 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    

    <!--
        3、指定包,指定包含哪些注解
            说一下这里:base-package="com.atguigu",作用是,com.atguigu包下的所有注解都生效,
            但是,你下面又指定了只扫描包下的Repository注解,这不就重复了吗,
            所以,需要使用use-default-filters="false",让指定包下的注解都先不生效,
            这样你里面再指定只扫描哪个注解,不就ok了吗
    -->
    <context:component-scan base-package="com.atguigu" use-default-filters="false">
        <!-- 只扫描包下的Repository注解 -->
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>

</beans>


src/main/java/com.atguigu.ioc_01/CommonComponent.java

package com.atguigu.ioc_01;

import org.springframework.stereotype.Component;

@Component // 这个注解就相当于你写了个Bean <bean id="commonComponent" class="CommonComponent"
public class CommonComponent {
}


src/main/java/com.atguigu.ioc_01/XxxDao .java

package com.atguigu.ioc_01;

import org.springframework.stereotype.Repository;

@Repository
public class XxxDao {
}

src/main/java/com.atguigu.ioc_01/XxxService .java

package com.atguigu.ioc_01;

import org.springframework.stereotype.Service;

@Service
public class XxxService {
}


src/main/java/com.atguigu.ioc_01/XxxController.java

package com.atguigu.ioc_01;

import org.springframework.stereotype.Controller;

@Controller // 默认id是:xxxController(XxxController类的首字母小写)
// 也可以覆盖哦:@Controller(value="white")
// 可以省略value,像这样:@Controller("white")
public class XxxController {
}


测试类 - SpringIocTest.java

package com.atguigu.test;

import com.atguigu.ioc_01.XxxDao;
import org.junit.jupiter.api.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringIocTest {

    @Test
    public void testIoc_01(){
        // 1、创建Ioc容器
        ClassPathXmlApplicationContext applicationContext
                = new ClassPathXmlApplicationContext("spring-01.xml");

        // 2、获取组件
        XxxDao xxxDao = applicationContext.getBean(XxxDao.class);
        System.out.println("XxxDao= " + xxxDao); // XxxDao= com.atguigu.ioc_01.XxxDao@3e2055d6

        Object xxxService = applicationContext.getBean("xxxService");
        System.out.println("xxxService= " + xxxService); // xxxService= com.atguigu.ioc_01.XxxService@50029372

        // 3、close容器
        applicationContext.close();
    }
}

相关推荐

  1. 基于注解方式 Ioc配置

    2024-04-08 14:04:05       17 阅读
  2. Spring基于注解IOC配置

    2024-04-08 14:04:05       33 阅读
  3. spring基于注解IOC配置

    2024-04-08 14:04:05       37 阅读
  4. 对于IOC注入两种方式注解和XML)

    2024-04-08 14:04:05       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 14:04:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 14:04:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 14:04:05       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 14:04:05       20 阅读

热门阅读

  1. Vue的生命周期

    2024-04-08 14:04:05       15 阅读
  2. 【Docker常用命令(四)】

    2024-04-08 14:04:05       17 阅读
  3. 虚拟机怎么方便将文件移至本地

    2024-04-08 14:04:05       11 阅读
  4. 力扣-图论

    2024-04-08 14:04:05       14 阅读
  5. web蓝桥杯真题:图片水印生成

    2024-04-08 14:04:05       13 阅读
  6. 面经 (24-4)

    2024-04-08 14:04:05       16 阅读
  7. 力扣-搜索二维矩阵

    2024-04-08 14:04:05       15 阅读
  8. 3GPP-LTE Band26标准定义频点和信道(V17.3.0 (2022-09)

    2024-04-08 14:04:05       15 阅读
  9. Python基于Tkinter的加法游戏

    2024-04-08 14:04:05       13 阅读