spring的依赖注入DI(IOC)

1、手动注入

(1)set注入

public class UserService {

    private UserDao userDao;

    public void setUserDao(UserDao dao){
        this.userDao = dao;
    }
}
    <bean id="userDao1" class="com.spring1.dao.UserDao"></bean>

    <bean id="userService" class="com.spring1.service.UserService">
        <property name="userDao" ref="userDao1"></property>
    </bean>
    

通过userService对象的setUserDao方法,将userDao1注入进去。

public class User {
    int id;
    String name;
    String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}
public class UserDao {

    public void setShowUser(User user){
        System.out.println(user.getId()+":"+user.getName()+":"+user.getPassword());
    }
}
    <bean id="user" class="com.spring1.entity.User">
        <property name="id" value="1"></property>
        <property name="name" value="zhangsan"></property>
        <property name="password" value="123456"></property>
    </bean>

    <bean id="userDao1" class="com.spring1.dao.UserDao">
        <property name="showUser" ref="user"></property>
    </bean>

在bean配置中对user初始化,userDao1通过自己的setShowUser方法将user注入

(2)构造方法注入

    <bean id="userDao1" class="com.spring1.dao.UserDao">
    </bean>

    <bean id="testService" class="com.spring1.service.UserService">
        <constructor-arg name="userDao1" ref="userDao1"></constructor-arg>
    </bean>
    @Test
    public void test() {

        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService service = (UserService) ac.getBean("testService");
        service.showUser();
    }
public class UserService {

    private UserDao userDao;

    public UserService(UserDao userDao1){
        this.userDao = userDao;
    }

    public void showUser(){
        System.out.print("ok-------------");
    }

}

构造函数参数的名字,要与类的构造参数的名字对应。

2、自动注入

    <bean id="userDao2" class="com.spring1.dao.UserDao"></bean>

    <bean id="testService" class="com.spring1.service.UserService" autowire="byName">
    </bean>

id=userDao2,下边的setUserDao2==userDao2是一样的。

public class UserService {

    private UserDao userDao;

    public void setUserDao2(UserDao userDao1){
        this.userDao = userDao1;
    }

    public void showUser(){
       userDao.showUser();
    }

}

byname自动注入的时候,就要顶一个一个name=类中的参数名字的bean

时间: 2024-10-15 16:03:10

spring的依赖注入DI(IOC)的相关文章

Spring.Net-DI依赖注入和Ioc控制反转

Spring.Core作为整个Spring框架的基础,实现了依赖注入的功能.Spring框架的其它模块都要依赖或扩展该模块. IObjectFactory接口,该接口实现了工厂模式,使用它可以帮我们创建对象,与具体的程序逻辑解耦. IApplicationContext是IObjectFactory的扩展,增加了许多企业级的功能,包括使用资源文件进行文本本地化,事件传播,资源装载等等. Spring.Net的配置 使用Spring.Net创建对象,需要在程序配置文件中配置   1:配置sprin

Atitit js中的依赖注入di ioc的实现

全类名(FQCN)为标识符1 混合请求模式1 使用类内  builder  即可..2 Service locator method走ok拦2 Javascript技术栈中的四种依赖注入详解2 Js没有接口,anno 但是动态属性就是接口默认支持.Ducktype 随便注入即可.. 全类名(FQCN)为标识符 了弥补纯字符串请求模式中的类型安全问题,全类名(FQCN)请求模式就应运而生了.其思想便是,在向容器请求依赖对象的时候,不是通过字符串的标识 符.而是通过被请求的依赖的全类名来定位依赖.这

框架学习 Spring之依赖注入DI

依赖注入的方式有四种: 1.Setter注入(属性注入) 2.构造器注入 3.P命名空间注入 4.集合类型值注入 1.Setter注入(属性注入) Employee 员工实体类 package com.spring.pojo; public class Employee { private Integer id; private String name; private Department department; public Integer getId() { return id; } pu

Spring框架3:spring的依赖注入

本系列笔记均是对b站教程https://www.bilibili.com/video/av47952931 的学习笔记,非本人原创 spring的依赖注入(DI) 什么是依赖注入: 作者:Angry Bugs 链接:https://www.zhihu.com/question/32108444/answer/581948457 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 看了几个高赞答案,感觉说得还是太啰嗦了.依赖注入听起来好像很复杂,但是实际上炒鸡简单,一

spring(3)------控制反转(IOC)/依赖注入(DI)

一,spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理. 所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. 没有控制反转这种模式前,你创建一个对象,在什么地方用,你得单独通过关键字new出来用, 但现在可以不用这样,你把new对象的权利交给spring配置文件,通过配置文件来'new', 就是权利的反转,你以前干的事

浅析Spring IOC、依赖注入(DI)和依赖查找(DL)

为什么要用IOC? 第一:对象的实例化不是一件简单的事情,比如对象的关系比较复杂,依赖关系往往需要程序员去维护,这是一件非常头疼的事. 第二:解耦,由容器去维护具体的对象 第三:托管了类的产生过程,比如我们需要在类的产生过程中做一些处理,最直接的例子就是代理,如果有容器程序可以把这部分过程交给容器,应用程序则无需去关心类是如何完成代理的 控制反转(Inverse of Control) 控制反转即IoC(Incersion of Control),从字面上理解就是控制反转,将对在自身对象中的一个

iOS控制反转(IoC)与依赖注入(DI)的实现

背景 最近接触了一段时间的SpringMVC,对其控制反转(IoC)和依赖注入(DI)印象深刻,此后便一直在思考如何使用OC语言较好的实现这两个功能.Java语言自带的注解特性为IoC和DI带来了极大的方便,要在OC上较好的实现这两个功能,需要一些小小的技巧. 控制反转和依赖注入 控制反转 简单来说,将一个类对象的创建由手动new方式改为从IOC容器内获取,就是一种控制反转,例如我们现在要创建一个ClassA类,则常规方法为 ClassA *a = [ClassA new]; 如果使用控制反转,

控制反转IOC与依赖注入DI

1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针.分针和秒针顺时针旋转,从而在表盘上产生正确的时间.图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务.我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组

依赖注入(DI)与服务容器(IoC)

参考文章:http://www.yuansir-web.com/2014/03/20/%E7%90%86%E8%A7%A3php-%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5laravel-ioc%E5%AE%B9%E5%99%A8/?preview 我们在建一个类时,在类的内部有可能会用到另外一个对象实例举个栗子: class User{ public function getUser(){ $db = new DB(); // 这里产生了对数据库连接类的依赖 $d