JavaWeb_(Spring框架)Spring中IoC与DI概念入门

Posted Cynical丶Gary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb_(Spring框架)Spring中IoC与DI概念入门相关的知识,希望对你有一定的参考价值。

 

 

  

 

    Spring是于2003 年兴起的一个轻量级的Java 开源框架,它由Rod Johnson创建。传统J2EE应用的开发效率低,Spring作为开源的中间件,提供J2EE应用的各层的解决方案,Spring贯穿了表现层、业务层及持久层,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式(full-stack)”选择。然而,Spring并不想取代那些已有的框架,而是与它们无缝地整合。

    简单来说,Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
Spring是什么?

 

1、方便解耦,简化开发
    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2、AOP编程的支持
    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3、声明式事务的支持
    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

4、方便程序的测试
    可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

5、方便集成各种优秀框架
    Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、MyBatis 、Hessian、Quartz)等的直接支持。

6、降低Java EE API的使用难度
    Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
为什么要使用Spring?

 

 

  创建工程,导入jar包  

  

  核心包:bean、context、core、expression;

  日志包:apache.commons.logging

 

  引入约束:bean约束和引入主配置文件头;

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

</beans>        
applicationContent.xml

 

  测试:将自定义对象由自己创建交由Spring管理

 

package com.Gary.bean;

public class User {

    private Integer u_id;
    private String u_username;
    private String u_password;
    
    
    public Integer getU_id() {
        return u_id;
    }
    public void setU_id(Integer u_id) {
        this.u_id = u_id;
    }
    public String getU_username() {
        return u_username;
    }
    public void setU_username(String u_username) {
        this.u_username = u_username;
    }
    public String getU_password() {
        return u_password;
    }
    public void setU_password(String u_password) {
        this.u_password = u_password;
    }
    
    
    
}
User.java

 

package com.Gary.test;

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

import com.Gary.bean.User;

public class HelloSpring {

    @Test
    public void Test1() {
        User u = new User();
        
        System.out.println("Test1()"+u);
    }
    
    //Spring是一个容器,它将帮助我们管理对象
    @Test
    public void Test2() {
        
        //根据spring配置文件获取容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通过getBean获取配置好的user对象,程序员向Spring容器要对象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }
    
    
}
HelloSpring.java

 

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

    <bean name="user" class="com.Gary.bean.User">
        
    </bean>

</beans>        
applicationContext.xml

 

Spring-IoC | DI概念介绍:(要实现IOC依赖DI的支持)

  IoC(Inversion of Control):反转控制:将我们自己创建对象的工作交给Spring容器帮我们完成; 
  DI(Dependency Injection):依赖注入:将值通过配置的方式为变量初始化/赋值(注入);

  IOC的反转:创建对象这份工作由我们自己执行反转给spring帮我们执行;
  IOC的控制:就是由spring帮我们负责创建销毁对象,掌控对象的生命周期等,我们在需要使用对象的时候跟Spring申请即可;
  IOC是一种编程思想,也是一种新的设计模式,它需要DI(依赖注入)技术的支持;

    c)注入方式:set方法注入、构造注入、字段注入(不推荐);

    d)注入类型: 

      i.值类型(value) – 八大基本数据类型;

      ii.引用类型(ref) – String、自定义对象;

 

  spring是一个容器,它将帮我们管理对象
  传统方式给u_id赋值

    @Test
    public void Test1() {
        User u = new User();
        //传统方式给u_id赋值
        u.setU_id(1);
        
        System.out.println("Test1()"+u);
    }

 

  Spring给u_id赋值

  @Test
    public void Test2() {
        
        //根据spring配置文件获取容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通过getBean获取配置好的user对象,程序员向Spring容器要对象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }

 

    <bean name="user" class="com.Gary.bean.User">
        <!-- 为u_id注入了一个id为2的值 -->
        <property name="u_id" value="2"></property>
    </bean>

 

  

 

package com.Gary.test;

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

import com.Gary.bean.User;

public class HelloSpring {

    @Test
    public void Test1() {
        User u = new User();
        //传统方式给u_id赋值
        u.setU_id(1);
        
        System.out.println("Test1()"+u);
    }
    
    //Spring是一个容器,它将帮助我们管理对象
    @Test
    public void Test2() {
        
        //根据spring配置文件获取容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        //User u = ac.getBean(User.class);
        //通过getBean获取配置好的user对象,程序员向Spring容器要对象
        User u = (User) ac.getBean("user");
        
        System.out.println("Test2()"+u);
        
    }
    
    
}
HelloSpring.java

 

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

    <bean name="user" class="com.Gary.bean.User">
        <!-- 为u_id注入了一个id为2的值 -->
        <property name="u_id" value="2"></property>
    </bean>

</beans>        
applicationContext.xml

 

  使用Spring改造Servlet项目对象关系依赖图

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于JavaWeb_(Spring框架)Spring中IoC与DI概念入门的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb_(Spring框架)Spring中IoC与DI概念入门

javaweb实训第五天上午——Spring基础

[刘阳Java]_Spring入门_第1讲

学JavaWeb必看文章!为什么我们会使用struts2,springMVC和spring这样的框架?

使用maven搭建ssm框架的javaweb项目

JavaWeb_(Spring妗嗘灦)Spring鏁村悎Hibernate