美文网首页
Spring IoC练习

Spring IoC练习

作者: 国王兔子 | 来源:发表于2019-03-04 21:12 被阅读0次

    控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

    1.IoC是一个很大的概念,可以用不同的方式实现。其主要形式有两种:

    • 依赖查找:容器提供回调接口和上下文条件给组件。EJB和Apache Avalon 都使用这种方式。这样一来,组件就必须使用容器提供的API来查找资源和协作对象,仅有的控制反转只体现在那些回调方法上(也就是上面所说的 类型1):容器将调用这些回调方法,从而让应用代码获得相关资源。

    • 依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)

    2.IOC和bean

    Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。

    • 通过构造器或工厂方法创建Bean实例
    • 为Bean的属性设置值和对其它Bean的引用
    • 调用Bean的初始化方法
    • 当容器关闭时,调用Bean的销毁方法

    Spring IoC容器的核心基础包:

    • org.springframework.beans
    • org.springframework.context

    3. 配置和使用

    配置方式有:

    • xml形式
    <bean id = "..." class="...">
       <!-- 放置bean的协作者和配置 -->
    </bean>
    
    • 注解形式
    @Configuration
    public class AppCar{
        @Bean
        public MyService myService(){
              return new MyServiceImpl();
       }
    }
    

    4.注解方式

    • 构造器注入
    • setter注入

    示例

    MassageService

    public interface MassageService {
        String getMassage();
    
    }
    

    MassageServiceImpl

    public class MassageServiceImpl implements MassageService {
        private String username;
        private int age;
        public MassageServiceImpl(String username,int age){
            this.username=username;
            this.age=age;
    
        }
        public String getMassage(){
            return "HelloWord!"+username+",age is"+age;
        }
    }
    

    MassagePrinter

    public class MassagePrinter {
        final private MassageService service;
        public MassagePrinter(MassageService service){
            this.service=service;
    
        }
        public void printMassage(){
            System.out.println(this.service.getMassage());
        }
    }
    
    

    配置文件

     
        <bean id="messageServiceImpl" class="com.spring.quickstart.MessageServiceImpl">
            <constructor-arg name="username" value="Tom"/>
            <constructor-arg name="age" value="20"/>
        </bean>
    
        <bean id="messagePrinter" class="com.spring.quickstart.MessagePrinter">
            <constructor-arg name="messageService" ref="messageServiceImpl"/>
        </bean>
    

    MassageApp

    public class MessageApp {
        public static void main(String[] args) {
            ApplicationContext context = new ClassPathXmlApplicationContext("/application.xml");
            MessagePrinter messagePrinter = context.getBean(MessagePrinter.class);
            messagePrinter.printMessage();
        }
    }
    

    5.依赖注入详细配置

    • 直接赋值
    • 引用其他bean
    • 内部bean
    • 集合
    • Null及空字符的值
    • xml短域名空间
    • 复合属性名称

    相关文章

      网友评论

          本文标题:Spring IoC练习

          本文链接:https://www.haomeiwen.com/subject/atewuqtx.html