Sping4之依赖注入
Spring的依赖注入可以是我们不需要去管理bean,网上看到一个回答很精辟:
现在你需要买一把锤子:
1、自己做一把,解释成java就是,调用者创建被调用着,也就是自己去创造一个造锤子的方法,然后自己调用;
2、自己找到生产锤子的工厂,然后问工厂买。就是工厂模式;
3、可以打电话给商店,让商店给自己送一把锤子过来,这就是sping的依赖注入;
第一种方法调用者创建被调用者,两者之前无法实现松耦合;
第二种方法调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用;
第三种调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。调用者和被调用者通过spring管理。他们的关系由spring维护
model
package com.hongcong.model;
public class People {
    private int id;
    private String name;
    private int age;
    public People() {
        super();
        // TODO Auto-generated constructor stub
    }
    public People(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "People [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
}
beans.xml
<?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="people1" class="com.hongcong.model.People">
<property name="id" value="1"/>
<property name="name" value="小一"/>
<property name="age" value="11"/>
</bean> <!-- 构造方法类型注入 -->
<bean id="people2" class="com.hongcong.model.People">
<constructor-arg type="int" value="2"></constructor-arg>
<constructor-arg type="String" value="小二"></constructor-arg>
<constructor-arg type="int" value="22"></constructor-arg>
</bean> <!-- 构造方法顺序注入 -->
<bean id="people3" class="com.hongcong.model.People">
<constructor-arg index="0" value="3"></constructor-arg>
<constructor-arg index="1" value="小三"></constructor-arg>
<constructor-arg index="2" value="33"></constructor-arg>
</bean>
<!-- 工厂注入 -->
<bean id="peopleFactory" class="com.hongcong.factory.PeopleFactory"></bean>
<bean id="people4" factory-bean="peopleFactory" factory-method="CreatePeople"></bean>
<bean id="people5" class="com.hongcong.factory.PeopleFactory" factory-method="CreatePeopleByStatic"></bean>
</beans>
执行类
package com.hongcong.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hongcong.model.People;
public class test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ca = new  ClassPathXmlApplicationContext("beans.xml");
        //属性注入
        People people1 = (People)ca.getBean("people1");
        System.out.println(people1);
        //构造方法type注入
        People people2 = (People)ca.getBean("people2");
        System.out.println(people2);
        //构造方法顺序注入
        People people3 = (People)ca.getBean("people3");
        System.out.println(people3);
        //非静态工厂
        People people4 = (People)ca.getBean("people4");
        System.out.println(people4);
        //静态工厂注入
        People people5 = (People)ca.getBean("people5");
        System.out.println(people5);
    }
}
工厂
package com.hongcong.factory;
import com.hongcong.model.People;
public class PeopleFactory {
    public People CreatePeople(){
        People people = new People();
        people.setId(4);
        people.setName("小四");
        people.setAge(44);
        return people;
    }
    public static People CreatePeopleByStatic(){
        People people = new People();
        people.setId(5);
        people.setName("小五");
        people.setAge(55);
        return people;
    }
}
Sping4之依赖注入的更多相关文章
- webapi - 使用依赖注入
		本篇将要和大家分享的是webapi中如何使用依赖注入,依赖注入这个东西在接口中常用,实际工作中也用的比较频繁,因此这里分享两种在api中依赖注入的方式Ninject和Unity:由于快过年这段时间打算 ... 
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
		原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ... 
- 在WPF中使用依赖注入的方式创建视图
		在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ... 
- MVVM模式解析和在WPF中的实现(六)  用依赖注入的方式配置ViewModel并注册消息
		MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ... 
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用
		再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ... 
- ASP.NET Core中如影随形的”依赖注入”[下]: 历数依赖注入的N种玩法
		在对ASP.NET Core管道中关于依赖注入的两个核心对象(ServiceCollection和ServiceProvider)有了足够的认识之后,我们将关注的目光转移到编程层面.在ASP.NET ... 
- ASP.NET Core中如影随形的”依赖注入”[上]: 从两个不同的ServiceProvider说起
		我们一致在说 ASP.NET Core广泛地使用到了依赖注入,通过前面两个系列的介绍,相信读者朋友已经体会到了这一点.由于前面两章已经涵盖了依赖注入在管道构建过程中以及管道在处理请求过程的应用,但是内 ... 
- 模拟AngularJS之依赖注入
		一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ... 
- angular2系列教程(八)In-memory web api、HTTP服务、依赖注入、Observable
		大家好,今天我们要讲是angular2的http功能模块,这个功能模块的代码不在angular2里面,需要我们另外引入: index.html <script src="lib/htt ... 
随机推荐
- Beyond Compare 3添加右键菜单
			目前是在Beyond Compare 3.1.9版本上试验可行,其他版本上尚未测试. 添加右键菜单步骤: 1.新建为.bat后缀的文本,将下面“添加右键菜单批处理”复制到此文本中. 2.将批处理移动到 ... 
- mysql 设置初始密码
			mysqladmin -uroot password "123" 设置初始密码 由于原密码为空,因此-p可以不用 mysqladmin -uroot -p"123&quo ... 
- HTML5 Audio(音频)
			<audio controls> <source src="horse.ogg" type="audio/ogg"> <s ... 
- 6.824 LAB1 环境搭建
			MIT 6.824 LAB1 环境搭建 vmware 虚拟机 linux ubuntu server 安装 go 官方安装步骤: 下载此压缩包并提取到 /usr/local 目录,在 /usr/l ... 
- python文件管理小计
			1.读取只当路径下所有文件和文件夹 import os def file_name(file_dir): for root, dirs, files in os.walk(file_dir): pri ... 
- python-setuptool安装
			安装setuptools时报error: ”RuntimeError: Compression requires the (missing) zlib module“ 解决办法: yum安装zlib和 ... 
- Jquery Mobile 让错误提示可在后台控制显示内容
			在jquery.mobile-1.4.5.min.js的5254行找到下面代码 return $.proxy(function( xhr, textStatus, errorThrown ) { 然后 ... 
- netmap配置
			1.配置流程 环境:centos 7.2.1511,内核版本3.10.0-327.el7.x86_64 [1]下载内核源码,https://buildlogs.cdn.centos.org/c7.15 ... 
- ESP32 做Web服务器 http Server步骤
			资料不多.多是国外网站的. 百度搜基本出来的是这个网站https://www.dfrobot.com/blog-922.html 出来的代码是: #include <WiFi.h>#inc ... 
- mysql修改root密码及修改密码过程中报错的解决方案
			参考网站: https://www.linuxidc.com/Linux/2018-05/152586.htmhttps://www.cnblogs.com/wangbaobao/p/7087032. ... 
