Spring专家课程Day01_Spring-IOC

文章目录

  • 基础配置
    • 1)基础文件结构(Maven项目创建)
  • 一、01_Spring概述_IOC_HelloWorld
    • 1.Spring框架的两个核心功能
      • 1.1) IOC/DI ,控制反转依赖注入!
      • 1.2) AOP,面向切面编程
    • 2.IOC的两种模式
      • 2.1)配置文件中配置 @Bean
      • 2.2)配置文件,组件扫描注解+类注解@Component
  • 二、02_JavaBean_JUnit_组件扫描
    • 1.JavaBean的概念
    • 2.Junit的引入
      • 2.1) junit的@Before 和 @After注解
    • 3.组件扫描功能@ComponentScan
    • 4.Spring提供的多种注解
    • 5.自定义组件ID
  • 三、03_作用域_Bean生命周期管理
    • 1.基于javax.annotation包的注解
      • 1.1 @PostContruct
      • 1.2 @PreDestroy : 对象销毁时自动执行的注解
      • 1.3 示例
    • 2.基于Spring的@Bean自带注解
      • 2.1 @Bean(intitMethod="open" ,destroyMethod = "close")
      • 2.2 示例代码
    • 3 @Scope("prototype")的特殊情况
  • 四、 04_懒惰初始化_@Import
    • 4.1 @Lazy 可以和@Component配合
    • 4.2 @Lazy 可以和@Bean配合
    • 4.3 @import 多人开发,多配置文件合并
  • 总结:
    • 1.[MVN地址](https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2)

基础配置

1)基础文件结构(Maven项目创建)

Spring专家课程Day01_Spring-IOC_第1张图片

一、01_Spring概述_IOC_HelloWorld

1.Spring框架的两个核心功能

1.1) IOC/DI ,控制反转依赖注入!

Spring专家课程Day01_Spring-IOC_第2张图片

1.2) AOP,面向切面编程

2.IOC的两种模式

2.1)配置文件中配置 @Bean

Spring专家课程Day01_Spring-IOC_第3张图片

2.2)配置文件,组件扫描注解+类注解@Component

参考二里面的明细3

二、02_JavaBean_JUnit_组件扫描

1.JavaBean的概念

Spring专家课程Day01_Spring-IOC_第4张图片
Spring专家课程Day01_Spring-IOC_第5张图片

2.Junit的引入

2.1) junit的@Before 和 @After注解

public class TestCase {

    AnnotationConfigApplicationContext ctx;

    @Before
    public void init(){
        ctx = new AnnotationConfigApplicationContext(Config.class);
        System.out.println("初始化Spring");
    }

    @After
    public void destroy(){
        ctx.close();
        System.out.println("销毁Spring");
    }

    @Test
    public void testScope(){
       Date d= ctx.getBean("myDate", Date.class);
        System.out.println(d);
    } 
}

3.组件扫描功能@ComponentScan

Spring专家课程Day01_Spring-IOC_第6张图片

4.Spring提供的多种注解

Spring专家课程Day01_Spring-IOC_第7张图片

5.自定义组件ID

实际中很少这么做,会增加出错率
Spring专家课程Day01_Spring-IOC_第8张图片

三、03_作用域_Bean生命周期管理

生命周期管理是否需要使用,根据具体业务需求而定;

1.基于javax.annotation包的注解

注意:因为以下注解不属于Spring,属于annotation,所以要单独引入

1.1 @PostContruct

	创建对象以后自动执行

1.2 @PreDestroy : 对象销毁时自动执行的注解

   关闭容器关闭对象时候执行

1.3 示例

组件代码:

@Component
public class FileLogger03 {

    public PrintWriter out;

    @PostConstruct
    //Spring创建Bean对象后自动执行初始化方法
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("打开Demo.text");
    }

    @PreDestroy
    //Spring 容器关闭时销毁对象,自动执行销毁方法
    public void close() {
        out.close();
        System.out.println("关闭Demo.text");
    }
}

配置类代码:

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")

public class Config { 

}

测试类代码:

public class TestCase {

    AnnotationConfigApplicationContext ctx;

    @Before
    public void init(){
        ctx = new AnnotationConfigApplicationContext(Config.class);
    }

    @After
    public void destroy(){
        ctx.close();
    } 

    @Test
    public void testScope(){
        FileLogger03 ff= ctx.getBean("fileLogger03",FileLogger03.class);
        ff.out.println("aaaaaaa");
        ff.out.println("ddddddd");
        System.out.println("life test");
    } 
}

2.基于Spring的@Bean自带注解

2.1 @Bean(intitMethod=“open” ,destroyMethod = “close”)

2.2 示例代码

组件代码:

//配置类采用了@Bean ,所以此处不用再@Component 
public class DemoLogger {

    public PrintWriter out;
  
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("打开Demo.text");
    }
  
    public void close() {
        out.close();
        System.out.println("关闭Demo.text");
    }
}

配置类:

@Configuration
//因为是采用@Bean标注,所以@ComponentScan可以省略
public class Config {  
    
    @Bean(initMethod = "open",destroyMethod = "close")
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }
    
}

测试类:

    @Test
    public void testLogger(){
        DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
        gl.out.println("good morning!");
    }

3 @Scope(“prototype”)的特殊情况

每次都创建一个对象,Spring为了避免内存泄漏,不会缓存对象的引用,所以Spring关闭时候就无法处理对象的销毁方法,需要手动销毁.
配置类:

    @Bean(initMethod = "open",destroyMethod = "close")
    @Scope("prototype")
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }

测试类:

    @Test
    public void testLogger(){
        DemoLogger gl = ctx.getBean("demoLogger", DemoLogger.class);
        gl.out.println("good morning!");
        gl.close(); //因为开启了  @Scope("prototype"),此处需要手动关闭
    }

四、 04_懒惰初始化_@Import

4.1 @Lazy 可以和@Component配合

前提组件有@Component,会自动创建;不想创建的话就是加上@Lazy

@Component
@Lazy
public class FileLogger03 {

    public PrintWriter out;

    @PostConstruct
    //Spring创建Bean对象后自动执行初始化方法
    public void open() throws Exception{
        out =new PrintWriter("Demo.text");
        System.out.println("111打开Demo.text");
    }

    @PreDestroy
    //Spring 容器关闭时销毁对象,自动执行销毁方法
    public void close() {
        out.close();
        System.out.println("111关闭Demo.text");
    }
}

4.2 @Lazy 可以和@Bean配合

配置中

   @Bean
   @Lazy
    public DemoLogger demoLogger(){
        return new DemoLogger();
    }

4.3 @import 多人开发,多配置文件合并

Spring专家课程Day01_Spring-IOC_第9张图片

@Configuration
@ComponentScan(basePackages = "cn.tedu.demo")
@Import({SysConfig.class})
public class Config {

}

总结:

1.MVN地址

你可能感兴趣的:(spring)