Spring IOC容器Bean注解创建对象组件扫描

 更新时间:2022年05月30日 14:49:34   作者:把苹果咬哭的测试笔记  
这篇文章主要为大家介绍了Spring IOC容器Bean注解创建对象组件扫描,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Spring IOC Bean注解对象组件扫描

什么是注解?

注解是代码里的特殊标记,格式:

@注解名称(属性名称=属性值, 属性名称2=属性值...)

可以作用在:类、方法、属性上面。

使用注解的目的:简化 xml 配置,让使用配置更简洁优雅。

一、spring 针对 bean 管理中创建对象提供注解

  • @Component
  • @Service
  • @Controller
  • @Repository

这 4 个注解功能是一样的,都可以用来创建 bean 实例。

但是通常实际应用中,为了让开发人员更加清晰当前组件所扮演的角色,一般会让它们各自应用在不同的层。比如 @Service 用在逻辑层、@Service 用在web层等。

示例

1. 引入依赖

引入 AOP 依赖,可以在这里搜索下载需要的 jar 包。

2. 开启组件扫描

其实就是告诉 spring 你要在什么地方使用注解。通过在 xml 里配置,spring就会到对应位置扫描下面的类:

<?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 http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启组件扫描-->
    <context:component-scan base-package="com.pingguo.spring5.dao"></context:component-scan>
</beans>

现在,我这里有多个包:

如果要扫描多个包,可以用逗号,隔开:

<context:component-scan base-package="com.pingguo.spring5.dao, com.pingguo.spring5.service"></context:component-scan>

如果所有下层的包都要扫描,那也可以之间写上层的目录:

<context:component-scan base-package="com.pingguo.spring5"></context:component-scan>

3. 创建类,并添加注解来创建对象

package com.pingguo.spring5.service;
import org.springframework.stereotype.Component;
@Component(value = "userService")
public class UserService {
    public void add() {
        System.out.println("service add() ... ...");
    }
}

现在终于不用去 xml 写 bean 标签了。

@Component(value = "userService"),这里 value 的值,等同于 <bean id="userService" ...里的 id 。@Component(value = "userService"),这里括号里的 value 可以不写,默认就是类名称的首字母小写。比如 类 UserService 就是 userService 。

4. 测试一下

package com.pingguo.spring5.testdemo;
import com.pingguo.spring5.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestService {
    @Test
    public void testService() {
        ApplicationContext context
                = new ClassPathXmlApplicationContext("bean1.xml");
        UserService userService = context.getBean("userService", UserService.class);
        System.out.println(userService);
        userService.add();
    }
}

运行一下:

com.pingguo.spring5.service.UserService@60611244
service add() ... ...
Process finished with exit code 0

成功。

如果把注解换成其他几个,重新运行测试方法,结果也是一样的。

二、组件扫描的其他过滤条件

在上述的开启扫描配置:

<!--开启组件扫描-->
<context:component-scan base-package="com.pingguo.spring5"></context:component-scan>

意思就是说扫描包路径com.pingguo.spring5下的所有类。

其实这里有个属性 use-default-filters,默认情况下就是等于true,也就是使用默认过滤规则,会去扫描路径下的所有。

那如果use-default-filters="false",就是不使用默认过滤条件,我们可以自己配置过滤。

1. include-filter

在指定的包路径下,只扫描包含了某种注解的类。比如:

<context:component-scan base-package="com.pingguo.spring5" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>

这就是说,在路径com.pingguo.spring5下,只扫描Service注解的类。

2. exclude-filter

与上面相反,这里是除了xx之外,都去扫描。

<context:component-scan base-package="com.pingguo.spring5" use-default-filters="false">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>

做了改动之后,意思也变了。现在是说在路径com.pingguo.spring5下,除了Service注解的类,其他都扫描。

以上就是Spring IOC容器Bean注解创建对象组件扫描的详细内容,更多关于Spring IOC Bean注解对象组件扫描的资料请关注脚本之家其它相关文章!

相关文章

  • MyBatis使用resultMap如何解决列名和属性名不一致

    MyBatis使用resultMap如何解决列名和属性名不一致

    这篇文章主要介绍了MyBatis使用resultMap如何解决列名和属性名不一致的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 微服务间调用Retrofit在Spring Cloud Alibaba中的使用

    微服务间调用Retrofit在Spring Cloud Alibaba中的使用

    这篇文章主要为大家介绍了微服务间调用Retrofit在Spring Cloud Alibaba中的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 详解SpringMVC重定向传参数的实现

    详解SpringMVC重定向传参数的实现

    本篇文章主要介绍了详解SpringMVC重定向传参数的实现,我们可以使用重定向的方式,改变浏览器的地址栏,防止表单因为刷新重复提交。有兴趣的可以了解一下。
    2017-01-01
  • SpringBoot使用统一异常处理详解

    SpringBoot使用统一异常处理详解

    这篇文章主要为大家详细介绍了SpringBoot使用统一异常处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • java实现注册登录系统

    java实现注册登录系统

    这篇文章主要为大家详细介绍了java实现注册登录系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • RabbitMQ实现消息可靠性传递过程讲解

    RabbitMQ实现消息可靠性传递过程讲解

    消息的可靠性传递是指保证消息百分百发送到消息队列中去,这篇文章主要介绍了RabbitMQ实现消息可靠性传递过程,感兴趣想要详细了解可以参考下文
    2023-05-05
  • mybatis相同的sql查询第二次查不出结果问题

    mybatis相同的sql查询第二次查不出结果问题

    这篇文章主要介绍了mybatis相同的sql查询第二次查不出结果问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • kafka内外网访问配置方式

    kafka内外网访问配置方式

    这篇文章主要介绍了kafka内外网访问配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • JavaWeb建立简单三层项目步骤图解

    JavaWeb建立简单三层项目步骤图解

    这篇文章主要介绍了JavaWeb建立简单三层项目步骤图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 快速搭建springboot项目(新手入门)

    快速搭建springboot项目(新手入门)

    本文主要介绍了快速搭建springboot项目(新手入门),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论