spring的组件注册(自定义@TypeFilter,@Scope组件作用域,懒加载@Lazy-bean,容器中引入第三方组件@Import,条件注册组件@Coditional)

   核心容器的功能,Spring 的底层重要的特性就是Ioc(控制反转)和DI(依赖注入),spring认为所有的组件应该放到容器(Ioc)中,组件之间的关系通过容器(IOc)来自动装配,这就是所谓的依赖注入。接下来用注解的方式来完成组件的注册,注入功能。

1,案例

1.1 创建一个maven的项目

在这里插入图片描述

1.2引入spring的依赖

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.4.RELEASE</version>
        </dependency>

在这里插入图片描述

以前用xml方式开发的时候用的是创建一个xml文件,将所有的关系配置在这个文件里
在这里插入图片描述

1.3,创建一个bean以及该有的构造器,get,set,toString方法

在这里插入图片描述

1.4,通过xml形式来注册

在这里插入图片描述

1.5,测试

在这里插入图片描述
在这里插入图片描述
注意;在通过组件id获取的时候id必须要与xml文件中的bean标签的id一致或者是java配置文件中的bean注解的方法名一致
在这里插入图片描述

2.0,注解的方式代替xml文件配置

在我们做的项目用到的springboot已经是注解的方式去注册bean组件,配置文件,带来非常的便捷。
2.1,@Configuration注解来配置文件
在这里插入图片描述
2.1,AnnotationConfigApplicationContext来创建容器
在这里插入图片描述
2.2,更改bean的名称
在这里插入图片描述
在这里插入图片描述
2.2,指定bean的方法名不改
在这里插入图片描述
@Bean注解放到方法上面,Ioc容器启动的时候会调用这个方法将返回值放到容器中,方法名作为组件的id。

3.0, 包扫描

3.1,xml方式扫描包
在这里插入图片描述
3.2,注解@ComponentScan(value = “”)包扫描在这里插入图片描述
3.3,按照mvc的分层结构 创建controller,service,dao

  • controller
    在这里插入图片描述
  • service
    在这里插入图片描述
  • dao

在这里插入图片描述
3.1,junit来测试

在这里插入图片描述
在这里插入图片描述
3.2,自动扫描排除指定规则
@ComponentScan
在这里插入图片描述
排除规则

  1. FilterType.ANNOTATION ;按注解

  2. FilterType.ASSIGNABLE_TYPE;按类型

  3. FilterType.ASPECTJ;按类型模式表达式

  4. FilterType.REGEX;按正则表达式

  5. FilterType.CUSTOM;按自定义

    3.2.1 排除组件 excludFilters在这里插入图片描述
    3.2.2 包含组件 incloudFilters
    在这里插入图片描述
    xml方式配置包含组件的时候是有默认的过滤规则

<!--use-default-filters="false">  禁用默认过滤规则truefalse时只包含组件才能生效-->
<context:component-scan base-package="com.asyt.annotation" use-default-filters="false"></context:component-scan>

注解启用禁用过滤器规则
在这里插入图片描述

在这里插入图片描述

3.3,组件作用域

注解@Scope来控制作用范围

  • SCOPE_PROTOTYPE;prototpe 多实例
  • SCOPE_SINGLETON;singleton 单实例(默认的)
  • org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST;request 同一次请求创建一个实例
  • org.springframework.web.context.WebApplicationContext#SCOPE_SESSION session 同一个session创建一个实例
    在这里插入图片描述
    在这里插入图片描述
    单实例;Ioc容器启动就会去调用方法创建对象,将对象放到ioc容器中,以后每次获取从容器中拿。
    在这里插入图片描述
    在这里插入图片描述
    多实例;ioc容器启动并不会去调用方法创建对象放在容器中,每次获取的时候才会调用方法创建对象
    在这里插入图片描述
    在这里插入图片描述
    获取的时候;
    在这里插入图片描述

3.3.1,懒加载(延迟加载)

懒加载只针对单实例bean 默认在容器启动的时候创建对象
懒加载容器启动并不会创建对象,第一次获取bean创建对象,并初始化。

在这里插入图片描述
在这里插入图片描述
使用懒加载注解@Lazy
在这里插入图片描述
在这里插入图片描述
第一次获取bean时会创建对象,之后每次获取bean都会从容器中拿而不会再创建对象去拿

在这里插入图片描述

4.0,按照条件注册bean

@Conditional;按照一定的条件进行判断,满足条件给容器中注册bean
通过环境操作系统来测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.0,导入组件

给容器中注册组件;

  1. 包扫描+组件标注注解(@Controller @Service @Respoitory @Component)
  2. @Bean【 导入第三方包里面的组件】
  3. @Import【快速给容器中导入一个组件】
    首先创建一个新的类
public 	class color{
}

然后在配置文件中@Import注解来注册第三方的组件
在这里插入图片描述
在这里插入图片描述

6.0,bean的生命周期

创建对象-初始化-销毁

  1. 首先创建一个类Car
public class Car{
public Car(){
        System.out.println("car.....自定义.....");
    }
    public void init(){
        System.out.println("car...初始化.....");
    }
    public void destory(){
        System.out.println("car.....销毁.....");
    }
}
  1. 创建一个生命周期的配置文件 MarinConfigLifeCyle
package com.asyt.annotation.config;


import com.asyt.annotation.bean.Car;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * bean的生命周期
 *    bean创建--初始化--销毁
 * 容器管理bean的生命周期
 * 我们可以自定义初始化和销毁;容器在bean进行当前生命周期的时候来调用  我么定义的初始化和销毁
 *
 */


@Configuration
public class MainConfigLifcycle {

    @Bean
    public Car car(){
        return  new Car();
    }
}

  1. 查看Car是否注册到Ioc容器中
@Test
    public void test01(){
        //创建容器
        AnnotationConfigApplicationContext annotationConfigApplicationContext =
                new AnnotationConfigApplicationContext(MainConfigLifcycle.class);
        System.out.println("容器创建完成。。。 ");
        Car bean = annotationConfigApplicationContext.getBean(Car.class);
    }
  1. 日志
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=59264:/Applications/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit5-rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/junit/lib/junit-rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/lib/tools.jar:/Users/chenasiyatu/spring/target/test-classes:/Users/chenasiyatu/spring/target/classes:/Users/chenasiyatu/.m2/repository/org/springframework/spring-context/5.2.4.RELEASE/spring-context-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/org/springframework/spring-aop/5.2.4.RELEASE/spring-aop-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/org/springframework/spring-beans/5.2.4.RELEASE/spring-beans-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/org/springframework/spring-core/5.2.4.RELEASE/spring-core-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/org/springframework/spring-jcl/5.2.4.RELEASE/spring-jcl-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/org/springframework/spring-expression/5.2.4.RELEASE/spring-expression-5.2.4.RELEASE.jar:/Users/chenasiyatu/.m2/repository/junit/junit/4.12/junit-4.12.jar:/Users/chenasiyatu/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/chenasiyatu/.m2/repository/org/junit/jupiter/junit-jupiter/5.6.0/junit-jupiter-5.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.6.0/junit-jupiter-api-5.6.0.jar:/Users/chenasiyatu/.m2/repository/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.jar:/Users/chenasiyatu/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/platform/junit-platform-commons/1.6.0/junit-platform-commons-1.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.6.0/junit-jupiter-params-5.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.6.0/junit-jupiter-engine-5.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/platform/junit-platform-engine/1.6.0/junit-platform-engine-1.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/platform/junit-platform-launcher/1.6.0/junit-platform-launcher-1.6.0.jar:/Users/chenasiyatu/.m2/repository/org/junit/vintage/junit-vintage-engine/5.6.0/junit-vintage-engine-5.6.0.jar:/Users/chenasiyatu/.m2/repository/junit/junit/4.13/junit-4.13.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.asyt.annoation.test.IOCTest_cylife,test01

car.....自定义.....
容器创建完成。。。 


Process finished with exit code 0

自定义;

  • 单例;在容器启动的时候创建对象
  • 多例;在每次获取的时候创建对象
    初始化;
  • 对象创建完成,并赋值好,调用初始化方法
    销毁;
    • 单实例;容器关闭的时候
    • 多实例;容易不会管理这个bean;容器不会调用销毁方法 手动调销毁方法
      指定初始化和销毁
@Bean(initMethod = "init",destroyMethod = "destory")

在这里插入图片描述
销毁;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值