Bean的构造器注入和setter注入

链接:https://pan.baidu.com/s/1vixLrr8harzZMwLsIB1Mwg
提取码:ou1n

首先要明白,为什么要注入?

IOC容器会在初始化时,创建好所有的bean对象的实例(懒汉模式除外:https://www.cnblogs.com/ABKing/p/12044025.html

这就带来一个问题,当bean中只有方法的时候还不会出问题。

但是如果bean中还有属性呢?

这就是属性注入的出现原因了。为了对bean的属性进行赋值,我们引入了注入的概念

0x00 构造器注入

配置文件中写入:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 5     <bean class="top.bigking.bean.Book" id="book">
 6         <constructor-arg index="0" value="1"/>
 7         <constructor-arg index="1" value="哈利波特"/>
 8         <constructor-arg index="2" value="18.8"/>
 9     </bean>
10 </beans>

Book类中:

 1 package top.bigking.bean;
 2
 3 public class Book {
 4     private Integer id;
 5     private String bookname;
 6     private double price;
 7
 8     public Book(Integer id, String bookname, double price) {
 9         this.id = id;
10         this.bookname = bookname;
11         this.price = price;
12     }
13
14     @Override
15     public String toString() {
16         return "Book{" +
17                 "id=" + id +
18                 ", bookname=‘" + bookname + ‘\‘‘ +
19                 ", price=" + price +
20                 ‘}‘;
21     }
22 }

测试类中:

 1 package top.bigking.test;
 2
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 import top.bigking.bean.Book;
 6
 7 public class BigKingTest {
 8     public static void main(String[] args) {
 9         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
10         Book book = (Book) applicationContext.getBean("book");
11         System.out.println(book);
12     }
13 }

运行:

Book{id=1, bookname=‘哈利波特‘, price=18.8}

Process finished with exit code 0

可以看到,成功输出了相应的值

这就是构造器注入

另外,还可以不通过构造器的索引,而是通过属性名来注入

application.xml:

1         <constructor-arg name="bookname" value="哈利波特"/>
2         <constructor-arg name="id" value="1"/>
3         <constructor-arg name="price" value="18.8"/>

0x01 setter注入

这里使用的是<property>标签,唯一的要求是,Book类中必须要有set方法,而且,由于不是构造器注入,在创建对象时,会默认调用无参的构造方法,所以在Book类中也必须要有一个无参的构造方法,否则会报错!

1         <property name="id" value="1"/>
2         <property name="bookname" value="哈利波特" />
3         <property name="price" value="18.8" />

占个坑,下次再写其他的注入

原文地址:https://www.cnblogs.com/ABKing/p/12044663.html

时间: 2024-12-22 22:03:48

Bean的构造器注入和setter注入的相关文章

【Spring】Construcotrer注入和setter注入不同的XML写法方式

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲解了Spring中constructor注入的4种不同写法和sette的3种不同写法 一.constructor注入4种不同写法 通过构造方法注入,就相当于给构造方法的参数传值set注入的缺点是无法清晰表达哪些属性是必须的,哪些是可选的,构造注入的优势是通过构造强制依赖关系,不可能实例化不完全的或无法使用的bean. 第1种方法:直接传值 <!-- constructor方式注入写

Spring依赖注入的Setter注入(通过get和set方法注入)

导入必要的jar包(Spring.jar和commonslogging.jar) 在src目录下建立applicationContext.xml   (Spring 管理 bean的配置文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPEING//DTD BEAN//EN" "http://www.springframewor

spring的两种属性注入方式setter注入和构造器注入或者自动注入

1.这里的属性自动注入,与注解配置bean是两回事.这里的自动注入,指的是bean属性的自动注入. bean属性自动注入,包括byNAme和ByType两码事. 2.所有的applicationContext都实现了resourceLoader接口,通过resourceLoader可以获得resource实例,进而可以访问资源文件. 所以要在类中获得resource实例,必须实现applicationContextAware接口.

使用构造方法注入和setter注入的配置文件

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

依赖注入之setter注入---只需修改配置,电脑就可以安装不同的打印机;读取properties配置文件并创建实例;实现不采用new的方式直接实例化对象

1.项目截图 2.黑白打印机类 package com.example.demo.printer; public class GrayPrinter implements Printer{ @Override public void init() { System.out.println("启动打印机"); } @Override public void print(String txt) { System.out.println("打印黑白文字:".concat(

【spring set注入 注入集合】 使用set注入的方式注入List集合和Map集合/将一个bean注入另一个Bean

Dao层代码: 1 package com.it.dao; 2 3 public interface SayHell { 4 public void sayHello(); 5 } Dao的Impl实现层: 1 package com.it.dao.impl; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import com.it.dao.SayHell; 7 8 /** 9 * Spring如何知道setter方法?如何将值注入

[Spring实战系列](8)Spring注入方式之setter注入

通常,JavaBean 的属性是私有的,同时拥有一组存取器方法,以setXXX() 和getXXX() 形式存在.Spring 可以借助属性的set方法来配置属性的值,以实现setter方式的注入. 1. 注入简单值 在Spring 中我们可以使用<property> 元素配置Bean 的属性.<property>在许多方面都与<constructor-arg> 类似,只不过一个是通过构造参数来注入值,另一个是通过调用属性的setter 方法来注入值. 举例说明,让我们

[Spring入门点滴]利用构造函数和setter注入

构造器方式注入: 主要是了解构造器方式注入时,参数顺序的区分(index),以及类型的区分(type),以及两者的混合使用:另外就是,当传入的内容有特殊符号时,借助于value标签和CDATA的处理.以保障程序的正常运行! /** * Created by wangzh on 2016/4/26. * Description:通过构造器注入实体: * 两个构造器区别就是类型不同: * 在配置spring时,可以利用index或者type进行区分: * 而对于包含特殊符号的值,可以结合<![CDA

Spirng setter 注入简单

1.      提供对应要注入的属性 //setter注入 public class Bean2 { private String name; private Integer age; // 提供要注入的属性对应的setter方法 public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } public void show() { System