栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring

文章目录

一、什么是依赖注入?

1、类的关系

1.1、 依赖关系(Dependency)1.2、聚合(Aggregation) 2、关系强度 二、 为什么使用依赖注入?

1、开闭原则

1.1、定义1.2、 开闭原则优点 2、高内聚,低耦合 三、 依赖注入的方式

1、通过 Set 方法注入

1.1、 配置文件1.2、 Bean 对象 2、通过构造方法注入

2.1、 配置文件2.2、 Bean 对象 3、自动注入

3.1、 局部自动注入3.2、 全局自动注入 四、 依赖注入的数据类型

1、注入 Bean 对象2、注入基本数据类型和字符串3、注入 List4、注入 Set5、注入 Map6、注入 Properties


一、什么是依赖注入?

DI (Dependency Injection):依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。
在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。
对于 Spring IOC 容器而言我们更多的是使用它的依赖注入。 Spring 创建对象的过程叫做 IOC,创建对象时给对象属性赋值叫做 DI,所以我们可以认为 IOC 和 DI 是同一个事情。

1、类的关系

继承 实现 依赖 关联 聚合 组合

1.1、 依赖关系(Dependency)

【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者

1.2、聚合(Aggregation)

【聚合关系】:是整体与部分的关系.如车和轮胎是整体和部分的关系. 聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体

2、关系强度

继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

二、 为什么使用依赖注入? 1、开闭原则 1.1、定义

OCP (Open Close Principle): 软件本身应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。

1.2、 开闭原则优点

易扩展。开闭原则的定义就要求对扩展开放。
易维护。软件开发中,对现有代码的修改是一件很有风险的事情,符合开闭原则的设计在扩展时无需修改现有代码,规避了这个风险,大大提交了可维护性。

2、高内聚,低耦合

高内聚是指相关度比较高的部分尽可能的集中,不要分散。
低耦合就是说两个相关的模块尽可以能把依赖的部分降低到最小,不要产生强依赖。

三、 依赖注入的方式

在使用依赖注入时,如果注入的是 Bean 对象,那么要求注入的 Bean 对象与被注入的 Bean 对象都需要 Spring IOC 容器来实例化。

1、通过 Set 方法注入

需要为注入的成员变量提供 Set 方法。

1.1、 配置文件
 
    
    
        
            
        
    
1.2、 Bean 对象
public class UsersServiceImpl implements UsersService {
    private UsersDao usersDao;

    public UsersDao getUsersDao() {
        return usersDao;
    }

    public void setUsersDao(UsersDao usersDao) {
        this.usersDao = usersDao;
    }

    public UsersServiceImpl(){
        System.out.println("Init.......");
    }

    @Override
    public void addUsers() {
        usersDao.insertUsers();
        //System.out.println("UsersService addUsers .....");
    }
}

2、通过构造方法注入

Bean 对象中需要提供有参的构造方法

2.1、 配置文件
    
    
    







        
    
2.2、 Bean 对象
    private UsersDao usersDao;

    public UsersServiceImpl(UsersDao usersDao){
        this.usersDao = usersDao;
    }
3、自动注入

自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入。
无论全局配置或局部单独配置,都有 5 个值可以选择:
no:当 autowire 设置为 no 的时候,Spring 就不会进行自动注入。
byName:在 Spring 容器中查找 id 与属性名相同的 bean,并进行注入。需要提供 set 方法。
byType:在 Spring 容器中查找类型与属性名的类型相同的 bean,并进行注入。需要提供 set 方法。
constructor:仍旧是使用 byName 方式,只不过注入的时候,使用构造方式进行注入。
default:全局配置的 default 相当于 no,局部的 default 表示使用全局配置设置。

3.1、 局部自动注入

通过 bean 标签中的 autowier 属性配置自动注入。
有效范围:仅针对当前 bean 标签生效。

    
    
    
3.2、 全局自动注入

通过 beans 标签中的 default-autowire 属性配置自动注入。
有效范围:配置文件中的所有 bean 标签都生效。



四、 依赖注入的数据类型 1、注入 Bean 对象

方式一:


	

方式二:


2、注入基本数据类型和字符串

方式一:


	content

方式二:


测试代码:

    private UsersDao usersDao;
    private String username;
    private int userage;

·············································································

    
        
        
        
    
3、注入 List


或者或者......


测试代码:

    private List list;
    private List users;

················································

        
            
                value1
                value2
            
        
        
            
                
                    
                    
                
                
                    
                    
                
            
        
4、注入 Set


或者或者......


测试代码:

    private Set usersSet;
    

··········································

        
            
                
                    
                    
                
                
                    
                    
                
            
        
5、注入 Map

方式一:






测试代码:

    private Map map;

···············································

        
            
                
                
            
        

方式二:









测试代码:

    private Map usersMap;

·························································

        
            
                
                
            
        
    
    
        
        
    
    
        
        
    
6、注入 Properties


Content


测试代码:

    private Properties properties;

···········································

        
            
                provalue1
                provalue2
            
        

结束!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/759131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号