Spring学习(二)spring ioc注入的三种方式

一、spring ioc注入有哪三种方式:

a  setter
    原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法;“让ioc容器调用该setter方法”,将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中。

b  构造器
    原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数。ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值;将ioc实例化的依赖对象作为构造器的参数传入。

【接口注入
    原理 : 为依赖对象提供一个接口实现,将接口注入给目标对象,实现将接口的实现类注入的效果。比如HttpServletRequest  HttpServletResponse接口
    注意:这是ioc提供的方式,spring中的ioc技术并没有实现该种注入方式】

c  方法注入
    原理 : 在目标对象中定义一个普通的方法,将方法的返回值设置为需要注入的依赖对象类型。通过ioc容器调用该方法,将其创建的依赖对象作为方法的返回值返回给目标对象。

二、具体实现

三种方法在实现上主要是被注入类以及applicationContext.xml不同,具体写法包括参数配置如下:

action:

package com.etoak.action;

import com.etoak.dao.UserDaoImpl;

public class LoginAction {
    /*
     * 1 setter注入   struts2表单项封装就是用了setter注入
     *
       private UserDaoImpl ud;

       public void setUd(UserDaoImpl ud,String name) {
           this.ud = ud;
       }
    */
    /*
     * 2 构造器方式   构造器参数不固定,在xml中描述
       private UserDaoImpl ud;
       private String name;

       public LoginAction(UserDaoImpl ud,String name){
           this.ud = ud;
           this.name = name;
       }
    */
    /*
     * 3 方法注入:方法的返回值为要注入的对象类型
    */
    public UserDaoImpl etoak(){
        return null;
    }
    public void init(){
        System.out.println("loginActoin初始化了");
    }
    public String execute() throws Exception{
        etoak().login();
        /*ud.login();
        System.out.println("name---->"+name);*/
        return "success";
    }
}

applicationContext.xml:

<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-3.2.xsd"
    default-lazy-init="true">
    <!--
        default-lazy-init="true"
        将bean对象初始化延迟到getBean(),而不是容器启动时自动初始化
     -->

    <!--
        目的:使用spring的ioc技术管理LoginAction、UserDaoImpl
            实现被动注入
        被动注入前提:两个对象都需要交由ioc容器管理
        init-method:在bean初始化时自动执行
        property:setter方法注入
        constructor-arg : 为当前调用的构造器赋值
                    index值为构造器第几个参数
        ref: 表示赋值的类型为自定义的类型(引用)
        value: 为String 、 基本数据类型、 class类型赋值
        lookup-method  : 方法注入,bean值为要注入的对象, name为方法名
        scope : singleton 单例
                prototype 原型
                request   ioc实例化的bean对象存储在request还是在session范围内,这两个取值仅在web环境下
                session
         -->
    <bean id="action" class="com.etoak.action.LoginAction" init-method="init" lazy-init="true" scope="singleton">
        <!-- <property name="ud" ref="dao"></property>  setter注入-->
        <!-- <constructor-arg index="0" ref="dao"></constructor-arg> 构造器注入:有几个参数赋几个
        <constructor-arg index="1" value="aaa"></constructor-arg>    -->
        <lookup-method name="etoak" bean="dao"/> <!-- 方法注入 -->
    </bean>  <!-- lazy-init单独这个bean延迟初始化 -->
    <bean id="dao" class="com.etoak.dao.UserDaoImpl"></bean>
</beans>

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-02 06:56:46

Spring学习(二)spring ioc注入的三种方式的相关文章

spring学习(02)之bean实例化的三种方式

bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构造器实例化: 这种实例化的方式可能在我们平时的开发中用到的是最多的,因为在xml文件中配置简单并且也不需要额外的工厂类来实现. 比如 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h

SSH深度历险(八) 剖析SSH核心原理+Spring依赖注入的三种方式

在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中.依赖注入的另一种说法是"控制反转",通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制反转是指new实例工作不由我们程序员来做而是交给spring容器来做. Spring依赖注入(

Spring学习笔记二(Bean注入的几种方式)

1.前言 上一篇博客从宏观上讲解了一下Spring的知识,下面这篇来着重讲解一下有关Bean注入的几种方式. 2.Bean注入的几种方式 2.1 类构造器初始化 这也是默认的方式,在上一篇博客中也有所体现.直接在applicationContext.xml配置文件中,配置Bean标签即可 <span style="font-family:SimSun;font-size:18px;"><!-- 实例工厂初始化 --> <!-- 必须先创建实例工厂对应的Be

【SSH三大框架】Spring基础第二篇:Spring依赖注入的三种方式

控制反转(Inversion of Control)和依赖注入(Dependency Injection): 应用控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它.也可以说,依赖被注入到对象中.所以,控制反转是,关于一个对象如何获取他所依赖的对象的引用,这个责任的反转. 对于依赖注入,有三种方式: 1.使用属性的setter方法注入 2.使用构造器注入 3.使用注解注入 下面我们介绍下这三种方式: 一.使用属性的setter方法注入 首先,我们写一个

Spring依赖注入的三种方式

Spring依赖注入(DI)的三种方式,分别为: 1. 接口注入 2. Setter方法注入 3. 构造方法注入 下面介绍一下这三种依赖注入在Spring中是怎么样实现的. 首先我们需要以下几个类: 接口 Logic.java 接口实现类 LogicImpl.java 一个处理类 LoginAction.java 还有一个测试类 TestMain.java Logic.java如下: package com.spring.test.di; public interface Logic { pub

Spring bean管理器 bean实例化的三种方式

bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.UserService; public class UserService { public UserService() { //该方法是无参方法 } public void AddUser(){ System.out.println("Add........................."

Spring:Spring-IOC实例化bean的常用三种方式

Spring容器提供了三种对bean的实例化方式: 1)构造器实例化 public class Demo { private String name; //getter和setter方法略 } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:

spring4之依赖注入的三种方式

1.Setter注入 <bean id="helloWorld" class="com.jdw.spring.beans.HelloWorld"> <property name="name" value="Spring"></property> </bean> 从这给最简单的配置可以得出以下两个结论:一.class属性需要全类名进行配置,说了ioc容器是通过反射进行创建bean的

struts请求参数注入的三种方式

.请求参数的注入 在Struts2框架中,表单的提交的数据会自动注入到与Action对象相对应的属性.它与Spring框架中的IoC的注入原理相同,通过Action对象为属性提供setter方法注入 要求: jsp中表单的name属性与Action中对应的属性的setter方法对应.要注入属性值的Action对象,必须为该属性提供setXXX()方法,因为Struts2的内部实现是按照JavaBean规范中提供的setter方法,自动为属性注入值 所以一般在Action中注入的属性的属性名与表单