博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Spring】Spring之依赖注入(DI)传递参数的方式
阅读量:5301 次
发布时间:2019-06-14

本文共 4700 字,大约阅读时间需要 15 分钟。

DI依赖注入传入参数的方式,这里介绍了基本数据类型,集合,符合数据类型的传递(String类型比较特殊,其传递值和基本数据类型的方法一致)

注入基本数据类型和String类型

通过setter方法注入基本数据类型与String

案例:

通过构造方法 ,注入基本数据类型与String

    方式1:

方式2:

 

注入集合类型的数据

注入List集合

A
B
C
D
E
F

 

注入Set集合

A
B
C
D
E
F

 

注入Map集合

 

注入Properties集合

A
B
C

通过引入的方式, 实现集合的重复利用

原理:

    1.  配置一个集合对象到容器中, 并指定ID
    2.  在其他对象使用时, 直接通过对象注入的方式, 将其注入即可
案例:
    向容器中添加集合对象:

张三
李四
王二
麻子

    将对象注入其他对象中:

 

对象的注入

    通过Setter方法设置属性   

    property节点:  通过set方法, 设置一个属性的值

    name属性: 表示的是 当前类中的属性的名称
    ref: 表示的是, 本次要注入的对象在当前容器中的id值
    案例:

 

    通过构造器设置属性

    constructor节点: 通过构造器  , 注入属性的值

    name属性:  这是一个容易混淆的地方 , 它指的其实是构造方法中形式参数列表中参数的名称
    ref: 表示的是, 本次要注入的对象在当前容器中的id值
    案例:

 

    对象的自动装配

    我们可以在bean节点中, 添加autowire属性来完成自动装配的操作

    属性取值范围:
     1,no : 默认设置 , 表示关闭自动装配
     2,byName : 通过名称完成自动装配:
            例如: 当前我们容器中存在一个对象, id为book;
                而刚好当前的这个person类中有一个名称为book的属性   
                那么这个时候, 我们的容器, 会自动完成两个对象的关联
                byName 不会判断传入的参数类型是否匹配, 只要名称相同, 就会强行建立依赖关系 , 导致报错!      
     3, byType : 通过类型完成自动装配
            例如: 当前我们容器中存在一个Book类的对象
                而刚好我们当前的Person有一个Book类型的属性
                我们的容器, 就会自动完成两个对象的关联
     4,constructor 与byType的方式类似,不同之处在于它应用于构造器参数
     5,autodetect  通过bean类来决定是使用constructor还是byType方式进行自动装配。如果发现默认的构造器,那么将使用byType方式
案例:

Person类:

package cn.xdl.bean;public class Person {    private String name;    private int age;    private Book book;    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;    }    public Book getBook() {        return book;    }    public void setBook(Book book) {        this.book = book;    }    @Override    public String toString() {        return "这个人叫做:" + name + ", 今年" + age + "岁了, 他有一本书:" + book ;    }    public Person(String name, int age, Book book) {        super();        this.name = name;        this.age = age;        this.book = book;    }    public Person() {        super();        // TODO Auto-generated constructor stub    }    public Person(Book book) {        super();        this.book = book;    }        }
Person.java

applicationContext文件:

applicationContext.xml

Test测试类:

package cn.xdl.test;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.xdl.bean.Person;import cn.xdl.test.util.ContextUtil;public class Test {        @Test    public void test() throws Exception {        ClassPathXmlApplicationContext context = ContextUtil.getC("bean6.xml");        Person p= context.getBean("person", Person.class);        System.out.println(p);//这个人叫做:小李, 今年23岁了, 他有一本书:书名=水浒传, 编号=10001            }}
Test.java

 

扫描组件:

扫描组件后,默认id值为类名首字母小写,也可以自定义id。

下面是一些常用的@式,@后面的式可以写值,也可以不写,还有就是@Value(value="abc"),可以简写为@Value("abc")。

@Compenent 通用注解

@Repository 持久层组件注解

@Service 业务层组件注解

@Controller 控制层组件处理

@Value 可以注入指定变量的值

@Scope 可以指定对象的作用域singleton(单例模式,默认)、prototype(多例模式)、request、session、global Session,

@Transactional 表示事务

Spring表达式

这种表达式在语法上和EL非常像,可以读取一个bean对象/集合中的数据

例如:

 

 

转载于:https://www.cnblogs.com/HDK2016/p/7150068.html

你可能感兴趣的文章
多进程服务器中,epoll的创建应该在创建子进程之后
查看>>
记那些年我们走过蛮荒时代,运维旁观者说
查看>>
一个php开发的用于路由器的小功能
查看>>
java数据类型
查看>>
连接mysql
查看>>
oo第一单元
查看>>
训练指南 UVALive - 3989(稳定婚姻问题)
查看>>
C#中的结构体与类的区别
查看>>
广州的小伙伴福利-由微软组织的在广州SQL Server线下活动
查看>>
2014年计划
查看>>
机器学习 - 开发环境安装pycharm + pyspark + spark集成篇
查看>>
Shell命令-文件及内容处理之iconv、dos2unix
查看>>
采样之Gibbs采样
查看>>
网页乱码问题
查看>>
在Python虚拟环境中安装scrapy
查看>>
cdoj 1256 昊昊爱运动 预处理
查看>>
Codeforces 936E. Iqea
查看>>
js函数定义方式
查看>>
如何使用OpenCart 2.x Event事件系统
查看>>
循环不变式
查看>>