Spring依赖注入的四种方式

时间:2021-12-24 00:10:08

首先,我们需要定义一个Bean的class类:

package framework.spring;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.*; public class Person { private String name;
private String address;
private int phone; public Person() {
System.out.println("【构造器】调用Person的构造器实例化");
} public Person(String name, String address, int phone) {
this.name = name;
this.address = address;
this.phone = phone;
} public String getBeanName() {
return beanName;
} public String getName() {
return name;
} public void setName(String name) {
System.out.println("【注入属性】注入属性name");
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
System.out.println("【注入属性】注入属性address");
this.address = address;
} public int getPhone() {
return phone;
} public void setPhone(int phone) {
System.out.println("【注入属性】注入属性phone");
this.phone = phone;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", phone=" + phone +
", beanFactory=" + beanFactory +
", beanName='" + beanName + '\'' +
'}';
} }

Setter注入

    <!--    setter -->
<bean id="person1" class="framework.spring.Person" scope="singleton" p:name="张三" p:address="广州"
p:phone="1319412212" />

setter注入只需要将相对应的属性参数传入,就可以了。

构造器注入

    <!-- constructor-->
<bean id="person2" class="framework.spring.Person" init-method="myInit"
destroy-method="myDestory" scope="singleton" >
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="address" value="beijing"></constructor-arg>
<constructor-arg name="phone" value="1319124212"></constructor-arg>
</bean>

静态工厂注入

    <!-- static factory-->
<bean id="person3" class="framework.spring.PersonFactory" scope="singleton" factory-method="staticPersonFactory">
</bean>

在静态工厂注入的配置文件中,我们需要定义对应的静态工厂类和静态方法。注意这里的静态就是指static,我刚刚突然想不起来静态是指什么意思了。

public class PersonFactory {
// static factory
public static Person staticPersonFactory(){
return new Person("lisi","nanjing",131912312);
} // factory
public Person personFactory(){
return new Person("wanger","changsha",131912312);
}
}

这里定义了两个工厂,一个是静态的,一个是非静态的。

实例工厂注入

实例工厂和静态工厂稍微有点区别,因为静态工厂不需要初始化工厂,而实例工厂需要。

    <!-- factory-->
<bean id="personFactory" class="framework.spring.PersonFactory"></bean>
<bean id="person4" class="framework.spring.PersonFactory" scope="singleton" factory-bean="personFactory" factory-method="personFactory">
</bean>

这里我们先定义了一个工厂类,然后才定义的我们需要的bean对象。

Spring依赖注入的四种方式的更多相关文章

  1. Spring依赖注入的三种方式

    看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...

  2. SSH深度历险记(八) 剖析SSH核心原则&plus;Spring依赖注入的三种方式

           于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...

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

           在java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依 ...

  4. Spring中依赖注入的四种方式

    在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的sett ...

  5. spring 依赖注入的3种方式

    在实际环境中实现IoC容器的方式主要分为两大类,一类是依赖查找,依赖查找是通过资源定位,把对应的资源查找回来:另一类则是依赖注入,而Spring主要使用的是依赖注入.一般而言,依赖注入可以分为3种方式 ...

  6. Spring基础05——Spring依赖注入的三种方式

    Spring支持3种依赖注入的方式:属性注入.构造器注入.工厂 1.属性注入 属性注入即通过setter方法注入Bean的属性或依赖的对象.使用<property>元素,使用name属性指 ...

  7. 六 Spring属性注入的四种方式:set方法、构造方法、P名称空间、SPEL表达式

    Spring的属性注入: 构造方法的属性注入 set方法的属性注入

  8. Spring事务管理的四种方式(以银行转账为例)

    Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败.   原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...

  9. Spring静态注入的三种方式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen1403876161/article/details/53644024Spring静态注入的三 ...

随机推荐

  1. 编写可维护的JavaScript

    第一章 1.基本的格式化 1.1推荐使用Tab键插入4分字符 1.2语句结尾要使用分号 1.3一行的长度最好不要超过80个字符 1.4通常在运算符后换行,下一行增加2个层级的缩进 1.5推荐在以下场景 ...

  2. 原创:新手布局福音!微信小程序使用flex的一些基础样式属性

    来源:新手布局福音!微信小程序使用flex的一些基础样式属性 作者:Nazi   Flex布局相对于以前我们经常所用到的布局方式要好的很多,在做微信小程序的时候要既能符合微信小程序的文档开发要求,又能 ...

  3. 如何用pdb进行python调试

    本文章讲述了如何用pdb进行python调试讲解. 当手边 没有IDE,面对着python调试犯愁时,你就可以参考下本文;(pdb 命令调试) 参 考:http://docs.python.org/l ...

  4. &lbrack;初读笔记&rsqb; Cloud Migration Research&colon; A Systematic Review &lpar;TCC&comma; 2013&rpar;

    Pooyan Jamshidi, Aakash Ahmad, Claus Pahl, "Cloud Migration Research: A Systematic Review,&quot ...

  5. ! cocos2d 同一个sprite的触控问题

    如果对一个A sprite添加触控,然后在一个场景中创建四个A的实例,那么1234逐个添加的话,只有最后一个会被点击到.其他的将不会响应.

  6. python time模块详解&lpar;转&rpar;

    python 的内嵌time模板翻译及说明  一.简介   time模块提供各种操作时间的函数  说明:一般有两种表示时间的方式:       第一种是时间戳的方式(相对于1970.1.1 00:00 ...

  7. Object-C内存管理基础

    如果你通过手工alloc的方式分配内存实例化创建一个对象,之后你需要release这个对象,同理你也不能手工释放(release)一个能自动释放(autoreleased)的对象,因为这个样子会使你的 ...

  8. Hadoop它——跑start-all&period;sh时间namenode不启动

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46353211 近期遇到了一个问题,运行start-all.sh的时候发现JPS一下 ...

  9. 在echarts3中使用字符云

    echarts2的官方API里是带有字符云的,但到了echarts3就被从官网上移除了,想要使用的话可以从github上下载: 下载地址:https://github.com/ecomfe/echar ...

  10. MySQL数据库设计规范

    1. 规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短.本规范旨在帮助或指导R ...