spring ioc

spring是一个非入侵框架,ioc是一种架构思想,致力于将程序模块解耦,突出面向接口编程的思想,把功能模块与业务逻辑部分分离,体现了一种灵活的架构模式

springioc的非入侵性,指的是程序如果能用spring管理运行,那么脱离了springioc程序依然能运行,只是springioc管理之后代码逻辑会更明析一些

springioc相关涉及的依赖有spring-context, spring-bean,spring-core,而spring-core又依赖spring-asm和commons-logging

所以我的依赖为commons-logging-1.1.1.jar,spring-asm-3.1.1.RELEASE.jar,spring-core-3.1.1.RELEASE.jar,spring-beans-3.1.1.RELEASE.jar,spring-context-3.1.1.RELEASE.jar

首先来java程序的注入方式,java注入和spring注入

构造器注入、setter注入、接口注入

首先定义属性接口类

package com.framework.common.java.inject;
/**
 * 引擎
 */
public interface IEngine {
  void start();
}
其次定义属性类

package com.framework.common.java.inject;
/**
 * 引擎1
 */
public class Engine implements IEngine{
  public void start(){
    System.out.println("引擎起动 ... ");
  }
}

1、构造器注入

<pre name="code" class="html">package com.framework.common.java.inject;
/**
 * 构造器注入
 */
public class ConsCar {
  private Engine engine;
  public ConsCar(Engine engine) {
    this.engine = engine;
  }
  public void drive() {
    System.out.println("构造器注入... ");
    engine.start();
  }
}

2、setter注入

package com.framework.common.java.inject;
/**
 * setter注入
 */
public class SetCar {
  private Engine engine;
  public Engine getEngine() {
    return engine;
  }
  public void setEngine(Engine engine) {
    this.engine = engine;
  }
  public void drive(){
    System.out.println("setter注入... ");
    engine.start();
  }
}
3、接口注入

package com.framework.common.java.inject;
/**
 * 接口注入
 */
public abstract class InterCar {
  public abstract IEngine getIEngine();
  public void drive(){
    System.out.println("接口注入 ... ");
    getIEngine().start();
  }
}


下面我们看看三种注入方式的spring配置

<!-- 构造器注入 -->
<bean class="com.framework.common.java.inject.ConsCar">
	<constructor-arg name="engine">
		<bean class="com.framework.common.java.inject.Engine"/>
	</constructor-arg>
</bean>

<!-- setter注入 -->
<bean class="com.framework.common.java.inject.SetCar">
	<property name="engine">
		<bean class="com.framework.common.java.inject.Engine"/>
	</property>
</bean>

<!-- 接口注入-->
<bean class="com.framework.common.java.inject.InterCar">
	<lookup-method name="getIEngine" bean="interEngine"/>
</bean>
<bean id="interEngine" class="com.framework.common.java.inject.Engine"/>
我看看三种注入方式

  public static void main(String[] args){
    ConsCar car1 = new ConsCar(new Engine());
    car1.drive();
    
    SetCar car2 = new SetCar();
    car2.setEngine(new Engine());
    car2.drive();
    
    InterCar car3 = new InterCar(){
      @Override
      public IEngine getIEngine() {
        return  new Engine();
      }
    };
    car3.drive();
  }
运行结果为:

构造器注入... 
引擎起动 ... 
setter注入... 
引擎起动 ... 
接口注入 ... 
引擎起动 ... 
再看spring的三种注入方式

  public static void main(String[] args){
    ApplicationContext ctx = new ClassPathXmlApplicationContext("inject.xml");
    ConsCar car1 = ctx.getBean(ConsCar.class);
    car1.drive();
    SetCar car2 = ctx.getBean(SetCar.class);
    car2.drive();
    InterCar car3 = ctx.getBean(InterCar.class);
    car3.drive();
  }
运行结果为:

构造器注入... 
引擎起动 ... 
setter注入... 
引擎起动 ... 
接口注入 ... 
引擎起动 ... 

由此可见,spring注入把一些对象之前的关系抽象到了配置文件中,做成了xml配置,而不需要在代码中new对象,或者set属性,让spring容器把bean管理起来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值