spring ioc应用场景都有哪些?要如何配置?

TheDisguiser 2020-05-20 16:35:12 java常见问答 8524

前面讲到了IOC与AOP的各种原理,那你知道IOC一般会应用于哪些场景呢?下面就一起来看看吧。

一、Spring简介

Spring是由Rod Johnson创建的目前使用非常广泛的开源框架。很难用一句简单的描述概括它的基本功能,Spring家族几乎可以解决我们在开发JavaEE项目中所有的问题,但Spring创建的初衷是为了解决企业级应用开发的复杂性,并致力于全方位简化Java开发。

为了降低Java开发的复杂性,Spring采取了以下4种关键策略:

1)基于POJO的轻量级和最小侵入性编程;

2)通过依赖注入和面向接口实现松耦合;

3)基于切面和惯例进行声明式编程;

4)通过切面和模板减少样板式代码。

spring框架通过依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)2项核心技术,来贯彻和执行上述4项策略。

二、IOC一般应用场景

spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,但是,我们还是需要告诉spring要创建哪些bean并且如何将其装配在一起。spring具有非常大的灵活性,它提供了三种主要的装配机制:

1)基于Xml的显式配置

<bean id="house" class="com.turing.wire1.PrintHouse">
    <constructor-arg index="0" ref="pinPrinter"></constructor-arg>
</bean>
public class PrintHouse
{
    private Printer printer;
    public PrintHouse(Printer printer)
    {
        this.printer = printer;
    }
    public void service()
    {
        printer.print();
    }
}

2)基于Java的显式配置

在使用Java代码进行配置的时候,实际上是使用一个Java类来代替原先的spring.xml

@Configuration //代表这是一个spring配置类
public class BeanConfig
{
    @Bean
    // 默认bean的id就是方法名
    // 可以通过name进行修改
    public PinPrinter pinPrinter()
    {
        return new PinPrinter();
    }
    @Bean
    public LaserPrinter laserPrinter()
    {
        return new LaserPrinter();
    }
    @Bean
    public PrintHouse printHouse(LaserPrinter printer)
    {
        return new PrintHouse(printer);
    }
    @Bean
    public PrintHouse printHouseOther(PinPrinter printer)
    {
        return new PrintHouse(printer);
    }
    public static void main(String[] args)
    {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BeanConfig.class);
        PrintHouse house = (PrintHouse) ctx.getBean("printHouse");
        house.service();
        ctx.close();
    }
}

3)自动化配置

使用@Component、@ComponentScan、@Autowired进行自动装配:


@Component
public class LaserPrinter implements Printer
{
    public void print()
    {
        System.out.println("使用激光打印机进行打印");
    }
}
@Component
public class PinPrinter implements Printer
{
    public void print()
    {
        System.out.println("使用针孔打印机进行打印");
    }
}
@Component
public class PrintHouse
{
    @Autowired //自动装配
    @Qualifier("laserPrinter") //当有两个以上的bean满足时,通过该注解进行区分
    private Printer printer;
    public void service()
    {
        printer.print();
    }
}
@Configuration
@ComponentScan
public class Test
{
    public static void main(String[] args)
    {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Test.class);
        PrintHouse house = (PrintHouse) ctx.getBean("printHouse");
        house.service();
        ctx.close();
    }
}

@Component用来声明哪些bean需要由spring容器进行管理

@ComponentScan用来对声明了@Component的类启用组件扫描,spring将会扫描==这个包以及这个包下的所有子包==

@Autowired实现自动装配

在上述用例中,我们看到了Spring中装配Bean的三种主要方式:自动化配置、基于Java的显式配置以及基于Xml的显式配置。不管采用什么方式,这些技术都描述了Spring应用中的组件以及这些组件之间的关系。同时,建议尽可能使用自动化配置,以避免显式配置所带来的维护成本。从选择配置方式的优先级来看,建议按照以下顺序:==自动化配置-->基于Java的显式配置-->基于Xml的显式配置==。

以上就是关于springIOC应用场景的所有内容了,更多相关java常见问答知识请关注奇Q工具网了解详情。

推荐阅读:

spring ioc原理和aop原理分别是什么?spring核心原理详解

Spring IoC机制是什么?实现原理

spring的ioc和aop的原理是什么?它们有什么优势吗?