spring之IOC DI 笔记详解

☆樱花仙子☆ 提交于 2019-12-29 02:12:41

首先,spring是一个开源框架,作用是降低程序的复杂性,可以整合各种流行框架。它主要的技术是IOC和AOP,这次主要记录IOC和DI的原理及使用

过程是先把jar包导入到工程中——编写配置文件——编写测试文件

1.使用FactoryBean来管理bean,采用了经典的工厂模式,通过从XML文件或属性文件中读取Javabean的定义。

2.BeanFactory实现了IOC控制,而ApplicationContext扩展了BeanFactory,在这个容器中提供了对其他框架的集成,任务调用等企业服务。

——什么是控制反转和依赖控制?

IOC(Inversion of Control):就是通过类来创建实例的工作交给了IOC容器,就是对象的创建是通过容器来实现的,开发代码时直接使用类的实例。

spring支持两种依赖注入(不支持接口注入):

1),setter注入,基于Javabean中的setter方法注入属性值。举例如下所示:

导入spring的jar包到Java project工程中,导入路径为:

第一步:点击项目右键——选择build path——Configure build Path——选择Libraries选项卡——点击Add External JARs...——然后把spring的jar包导入就OK了

第二步:写实体类和配置文件

实体类文件如下所示:

package com.gp.service;

public class User {
  private String username;
  private String password;

public String getUsername() {
 return username;
}

public void setUsername(String username) {
 this.username = username;
}
 
  public void show(){
   System.out.println("姓名是: "+username+"  , 密码是:"+password);
  }

public String getPassword() {
 return password;
}

public void setPassword(String password) {
 this.password = password;
}
}

配置文件applicationContext.xml,在src下直接建立的,文件内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="user" class="com.gp.service.User">
     <property name="username" value="zhangsan"/>
     <!-- 调用的是setUsername后面的值,即把set后的第一个字母小写即可 -->
     <property name="password" value="123456"/>
  </bean>
</beans>

第三部,编写测试文件:

package com.gp.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.gp.service.User;

public class TestUser {
   public static void main(String[] args) {
   
 //spring容器是在此处进行初始化的,对象的创建是有spring容器创建的,此处加载容器,
    //通过getBean来获取对象,里面的参数是由xml文件中bean标签的id
 ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 User user=(User) context.getBean("user");
    user.show();
  }
}

运行结果如下所示:

姓名是: zhangsan  , 密码是:123456

2),构造器注入,基于构造方法为属性赋值。容器通过调用类的构造器调用类的构造方法,将其所需的依赖关系注入其中。(好处,在实例化对象的同时就完成了属性的初始化)

默认是调用类的默认构造函数,若编写自定义的构造方法,一定要重写默认的构造方法。

实体类修改如下所示;

    public User1(String username,String password){
     this.username=username;
     this.password=password;
    }

配置文件修改如下 所示:

 <bean id="user" class="com.gp.service.User1">
     <constructor-arg index="0" type="java.lang.String" value="zhangsan"/>
     <constructor-arg  index="1" type="java.lang.String" value="123456"/>
 </bean>

测试文件不变,运行结果同上所示一样。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!