zoukankan      html  css  js  c++  java
  • spring1--概念引入

    对象创建和依赖注入

    一个demo

    public interface SQLDao {
    
        public void insert();
    }
    
    
    public class DoSomeThingsMysqlDao implements SQLDao{
    
        public void insert(){
            System.out.println("do insert");
        }
    }
    
    public class DoSomeThingsService {
    
        DoSomeThingsMysqlDao dao = new DoSomeThingsMysqlDao();
        public void add(){
            System.out.println("service do insert");
            dao.insert();
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            DoSomeThingsService service = new DoSomeThingsService();
            service.add();
        }
    }

    service do insert
    do insert



    在这个例子中,Test 中使用 new 新建了 DoSomeThingsService ,

    DoSomeThingsService 类中使用 new 新建了 DoSomeThingsMysqlDao,并且  Dao 被Service 使用,Service 依赖于 Dao。说  DoSomeThingsService 和 DoSomeThingsMysqlDao存在依赖关系。

    现在如果需要修改为Oracle ,那就需要新加一套 Oracle的数据库实现,并且在 service里做代码修改。

    public class DoSomeThingsOracleDao implements SQLDao{
    
        public void insert(){
            System.out.println("oracle do insert");
        }
    }
    
    public class DoSomeThingsService {
    
        DoSomeThingsOracleDao dao = new DoSomeThingsOracleDao();
        public void add(){
            System.out.println("service do insert");
            dao.insert();
        }
    }
    
    service do insert
    oracle do insert

    这样虽然实现功能了,但是需要修改代码。

    还有一个解决办法,就是在代码之外去解决这个问题,在配置文件里实现对象的创建和依赖关系的创建。spring 就是做这个事情的。

    spring 可以通过配置文件或者注解 实现对象的创建(new)和依赖注入(set属性)。底层原理是 反射,基于反射来创建对象。

    IOC(Inversion of Control)

    IOC的一种思想,是控制反转。

        控制:控制对象的创建,赋值

        反转:由程序代码外部的容器来创建。

        正转:程序代码里使用new,调用对象的构造函数创建对象。

    IOC思想的实现--依赖注入(DI) 。

        依赖:类与类之间的依赖调用关系。

        注入:赋值。

    IOC,DI的目的是解耦合。

    动态代理

    A想访问B ,但是B 禁止被访问。这个时候,可以在中间创建一个类C,C可以被A访问,C也可以访问B,这样A通过C来实现对B的访问。

    代理模式就是:为其他对象提供一种代理以控制对这个对象的访问。

    作用:

        1.控制对目标对象的访问。

        2.功能增强。(C可以在访问B之前之后做一些事情)。

    实现:

        1.静态代理

        2.动态代理(代理类在运行时被创建出来。【常用】)

          ① JDK实现动态代理。 目标类必须实现接口

          ② cglib实现动态代理。 代理类是目标类的子类,不需要目标类实现接口。【应用更广泛】

    AOP

    动态代理的使用,提炼,规范,形成了一种思想,即AOP。

    AOP(Aspect Oriented Programming)--面向切面编程。常用的有日志,事物。

    AOP的目的是解耦合。

    使用动态代理的好处

        1.代码分离(业务代码和非业务代码分离) ,便于开发。

        2.分业务功能集中处理,便于修改及其维护。

    大致流程:1找出程序中与业务无关的部分,2进行封装,3考虑在哪里调用(即将封装的内容加到业务代码中)

  • 相关阅读:
    VS2017试用期到期后登录微软账户出现错误解决方法
    Unable to start process "dotnet-projectmodel-server" while starting VS2015 问题
    如何写.gitignore只包含指定的文件扩展名
    Win7 通过Smb共享CentOS文件步骤
    Linux下用sudo 命令时出现 is not in the sudoers file
    ubuntu下安装chorme浏览器
    qt for ios扫描二维码功能实现
    ubuntu14.04登陆后只显示桌面文件,快速启动栏不显示,终端不能打开
    编译 Qt with Openssl for IOS
    sql print原理
  • 原文地址:https://www.cnblogs.com/llq1214/p/11162047.html
Copyright © 2011-2022 走看看