spring IOC

spring是什么

分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。
提供了展现层 (SpringMVC)和持久层 (Spring JDBCTemplate)以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架

解决了什么问题

程序员不需要创建对象、销毁对象、管理对象的生命周期,只需要使用对象。spring结局的问题就是需要经常新建对象的问题,避免了关键字new造成耦合的问题。spring不再需要进行明确的引用关系传递,直接通过配置完成。

所有框架几乎都可以在spring中整合在一起使用;

优势

  1. 方便解耦,简化开发;
  2. AOP 编程的支持
  3. 声明式事务的支持
  4. 方便程序的测试

类与类之间的关系

依赖

(Dependency)对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参数、返回值建立的对于其他对象的调用关系
在这里插入图片描述

关联

(Association)对象之间一种引用关系,比如客户类与订单类之间的关系。这种关系通常使用类的属性表达。指一个类指到另一个类中的属性. 而且是长期的 (不带有包含关系的关联)
在这里插入图片描述

聚合

(Aggregation)表示has-a的关系,是一种不稳定的包含关系。聚合类不必对被聚合类负责。使用集合属性表达聚合关系。较强于一般关联 , 有整体与局部之间的关系,并且没有了整体,局部也可单独存在,如主板、显卡和计算机就是聚合关系。
在这里插入图片描述

组合

(Composition)表示contains-a的关系,是一种强烈的包含关系。组合类负责被组合类的生命周期。也使用集合属性表达聚合关系
在这里插入图片描述

继承

表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。直接使用语言中的继承表达。
在这里插入图片描述

IOC和DI

IOC(Inversion of Control 控制反转),软件系统在没有引入IOC容器之前,如果一个对象A依赖于一个对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上,即创建什么对象决定权在创建方手上。
DI(Dependency Injection 依赖注入),控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。“控制反转”的一个更合适的名字叫就叫做“依赖注入(Dependency Injection)”,同时实现IOC的方法也是注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

构造方法注入

import com.wanxi.dao.UserDao;

public class UserService {
   

    private UserDao userDao;

    public UserService() {
   
    }

    public UserService(UserDao userDao){
   
        this.userDao = userDao;
    }

    public void login(){
   
        userDao.find();
        System.out.println("com.wanxi.service  UserService.login()");
    }
}
package com.wanxi;

import com.wanxi.dao.UserDao;
import com.wanxi.service.UserService;

public class Main {
   
    public static void main(String[] args) {
   
        UserDao userDao = new UserDao();
//        构造方法注入
        UserService userService = new UserService(userDao);

        userService.login();
    }
}

set方法注入

import com.wanxi.dao.UserDao;

public class UserService {
   

    private UserDao userDao;

    public UserService() {
   
    }

    public void setUserDao(UserDao userDao) {
   
        this.userDao = userDao;
    }

    public void login(){
   
        userDao.find();
        System.out.println("com.wanxi.service  UserService.login()");
    }
}
package com.wanxi;

import com.wanxi.dao.UserDao;
import com.wanxi.service.UserService;

public class Main {
   
    public static void main(String[] args) {
   
        UserDao userDao = new UserDao();

//        set方法注入
        UserService userService = new UserService();
        userService.setUserDao(userDao
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值