01spring---IOC-1

本文详细介绍了Spring框架的核心特性,包括IoC/DI的控制反转与依赖注入,AOP面向切面编程的应用,以及如何利用JUnit进行单元测试和组件扫描的最佳实践。通过实例演示,读者将掌握Spring容器的配置和Bean的管理,提升开发效率。
摘要由CSDN通过智能技术生成

目录

 

1.spring框架介绍

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

        1.1.1IOC

1.1.2DI(后续详细介绍)

1.1.3Java Bean

1.2AOP(面向切面编程)(后续详细介绍)

2.利用JUnit测试

2.1使用JUnit

2.2利用JUnit测试Spring 

3.组件扫描

3.1spring组件扫描功能

3.2Spring提供多种组件注解

3.3定义组件ID

1.spring框架介绍

        spring是开源Java软件框架,利用这套框架可以款速搭建Java软件。

        可以简单理解为框架:框架是半成品软件组件。

        具体表现来看,是一系列的jar包文件,普通的jar包只是工具包,而框架更多的是解决了某些特定的问题,比如开发效率问题,执行问题等。

        在使用框架时,可能还需要遵循框架的特定方式来编程。

        Spring框架有两个核心的功能,其他的组件也是基于这两个核心功能实现的:

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

        1.1.1IOC

        (Inversion of Control)直接翻译“控制反转”:

        1)主动控制:由应用程序主动控制管理“对象组件”。简单理解:对象的创建,管理都由自动亲手完成(适合管理创建过程简单的对象)。

        2)控制反转:由外部容器环境(框架)创建管理“对象组件”交给应用程序使用。简单理解:将对象的创建,管理交给Spring容器去管理,自己只是使用(适合创建过程复杂的对象)。

       创建一个spring测试程序:

        

1创建一个Maven项目

2.创建Demo类 

package com.jt.demo;

public class Demo {

    @Override
    public String toString(){
        return "hello spring";
    }
}

3.在pom文件中添加依赖

     <!--指定JDK的版本 -->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
    <!-- 添加spring-context依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
    </dependencies>

4.创建信息类config

package com.jt.congfig;

import com.jt.demo.Demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration //标识这是一个配置类
//这个类想作用就是通知Spring启动以后创建的对象
public class Congfig {

    @Bean  //告诉Spring在启动的时候,加载被@Bean标识的方法
           //返回值是Sping创建的对象,方法名是Bean的ID,一般在项目中会有多个Bean,Spring会根据        
           //对应的方法名,找对应的Bean
    public Demo textConfig(){
        return new Demo();
    }
}

5.利用测试类进行测试

package com.jt.textdemo;

import com.jt.demo.Demo;
import com.jt.congfig.Congfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Text {
    public static void main(String[] args) {
        //初始化spring容器
        //AnnotationConfigApplicationContext 是spring官网提供的
        AnnotationConfigApplicationContext applicationContext=
                new AnnotationConfigApplicationContext(Congfig .class);
        //获取spring创建对象
        Demo demo = applicationContext.getBean("textConfig", Demo.class);
        System.out.println(demo);
        
    }
}

 结果返回hello spring 则测试成功

1.1.2DI(后续详细介绍)

1.1.3Java Bean

        Bean的英文意思是“豆子”

        为了规范java类的定义,java提供Java Bean规范,所谓的JavaBean规范就是约定java类的定义规则,使程序规范一致,方便使用和交流。其约定如下:

        1.需要定义包package

        2.有无参构造器

        3.需要实现序列化接口(序列化能把堆内存中的对象的声明周期延长,做持久化操作,当下次再需要这个对象的时候,我们不用new了,直接从硬盘中读取就可以了)

        4.包含使用getXxx setXxx声明的“Bean属性”xxx

                1)Bean属性(Bean Property)就是指getXxx setXxx的用法

                2)对象属性(Object Filed)是指对象的实例化变量

      spring与JavaBean

        1.Spring建议被其管理的对象符合JavaBean规范,同时为了方便实用Spring也支持对不标准的Java对象进行管理

        2.因为Spring管理的对象是JavaBean对象,所以也称Spring为JavaBean容器、Bean容器、Spring容器、IOC容器

案列:

package com.jt.demo;  
import java.io.Serializable;

public class User implements Serializable { 
    
    private String name="zhangsan"; //实例变量,对象属性
    
    public String getName() {  //Bean属性 name
        return name;
    }

    public void setName(String name) { //Bean属性 name
        this.name = name;       
    }
    
    public String getLastName(){  //Bean属性 lastName
        return name.substring(0,1);
    }
    
}

1.2AOP(面向切面编程)(后续详细介绍)

2.利用JUnit测试

2.1使用JUnit

1.导包

       dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

2.测试

package com.jt;

import org.junit.Test;

public class TestHello {
    @Test  //单元测试
    public void textHello(){
        System.out.println("hello word!");
        }
}

        结果在控制台输出:hello word!

2.2利用JUnit测试Spring 

        测试Spring的时候需要Spring容器的代码冗长麻烦,利用Junit的@Before和@After注解声明方法,封装Spring的初始化和销毁方法,可以一劳永逸的解决Spring的初始化问题。

案列:

package com.jt.test;

import com.jt.config.ConfifDemo;
import com.jt.demo.Demo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Text1 {

    AnnotationConfigApplicationContext context ;
    @Before
    public void before(){
        //初始化Spring容器
        context = new AnnotationConfigApplicationContext(ConfifDemo.class);

        System.out.println("spring销毁之前");
    }
    @After
    public void after(){
        context.close();//关闭
        System.out.println("spring销毁之后");
    }

    @Test
    public void testHello(){
                                      // 第一个参数为Bean id ,第二个为类名.class
        Demo demo = context.getBean("demoText", Demo.class);
        System.out.println(demo);
    }

}

控制台输出内容:

spring销毁之前
hello word!
spring销毁之后

3.组件扫描

3.1spring组件扫描功能

        spring提供组件扫描注解,利用组件扫描注解和组件注解配合,可以自动扫描包空间自动创建Bean对象,减少编码,提高编程的效率

案列:

1.案例结构

 2.提前准备的数据

package com.jt.bean;

import org.springframework.stereotype.Component;

//@Component
@Component("BeanDemo") //自己写Bean id 建议使用默认的Bean id 减少代码,进而降低出错率
public class BeanDemo01 {

    @Override
    public String toString() {
        return "hello BeanDemo01";
    }
}

3.编写配置类

package com.jt.config;

//import com.jt.demo.Demo;
//import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "com.jt.bean")
public class Config {
//    @Bean
//    public Demo bean(){
//        return new Demo();
//    }
    /**
     * 写@ComponentScan注解,以上代码可以省略不写
     */
}

4.进行测试

package com.jt.test;

import com.jt.bean.BeanDemo01;
import com.jt.config.Config;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.io.Serializable;

public class TestDemo01 implements Serializable {

    AnnotationConfigApplicationContext cgx;

    @Before
    public void before(){
        System.out.println("bean创建之前");
        //注意,此处传的参数为配置类的类名.class
        cgx=new AnnotationConfigApplicationContext(Config.class);
    }
    @After
    public void after(){
        cgx.close();
        System.out.println("bean被销毁了");
    }
    @Test
    public void  testBeanDemo(){
                                    //  Bean id
        BeanDemo01 demo01 = cgx.getBean("BeanDemo", BeanDemo01.class);
        System.out.println(demo01);
    }
    
}

5.结果

bean创建之前

hello BeanDemo01

bean被销毁了

3.2Spring提供多种组件注解

         Spring提供了多种组件注解,用于程序中不同用途的组件标注,这些注解名字不同但作用是相同的,包括:

        @Controller   控制器组件

        @Service       业务层组件

        @Component 通用组件

3.3定义组件ID

在使用组件扫描功能的时候@Component注解可以添加属性,自定义组件的id

//@Component
@Component("BeanDemo") //自己写Bean id 建议使用默认的Bean id 减少代码,进而降低出错率

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值