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

参考二里面的明细3

二、02_JavaBean_JUnit_组件扫描

1.JavaBean的概念

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

4.Spring提供的多种注解

在这里插入图片描述

5.自定义组件ID

实际中很少这么做,会增加出错率
在这里插入图片描述

三、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 多人开发,多配置文件合并

在这里插入图片描述

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

}

总结:

1.MVN地址

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值