SSM学习回顾 DAY1

SSM学习回顾 DAY1

IOC与DI

在说到IOC与DI时我们先要明确一个开发原则,就是OCP原则:对扩展开放,对修改关闭。也就是说我们可以在原有程序基础上去进行扩展开发而不能对源代码进行修改。

1.IOC(控制反转):传统的生成一个实例对象一般采用的是直接进行对象创建(new Class)或者是通过工厂模式获得一个对象的实例,但这样做的话程序简单还能够接受,如果程序一旦变得复杂起来了或者实例对象需要量太多时系统的耦合度就变得很大,不利于后期的程序扩展与维护,如果业务需求发生改变就会要求对源码进行修改,这是不可取的。所以我们通过Spring将我们的实例对象交予Spring的Bean工厂去进行处理,当需求变动或者要增加对象时只需要修改相关的配置文件就可以了,而不需要修改源代码。

    //以前的方式
    public void demo1(){
        UserService user = new UserServiceImpl();
        user.sayOut();
    }

    //Bean工厂获取对象
    public void demo2(){
        ApplicationContext applicationContext =
                    new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService user = (UserService) applicationContext.getBean("userService");
        user.sayOut();
    }

配置文件ApplicationContext.xml

    <!-- 控制反转 将对象交予Spring创建 -->
    <bean  id="userService" class="com.imook.ioc.demo.UserServiceImpl">

2.DI(依赖注入):依赖注入就是对对象所需要的属性和对象进行配置,也是在bean配置之中进行完成的。
举个例子说明,一个类Person,另一个类Car,如果Person的某个方法比如说drive,需要引用Car,则称Person类依赖于 Car类,延伸到对象,这种依赖关系依然成立,比如说Person类的对象boy依赖于Car类的对象toyota。
这其中的依赖关系,就导致了对象boy需要负责对象toyota的创建,甚至是整个生命周期的管理,而这样显然会带来耦合度高,不易维护等缺点,比如说要让这个男孩驾驶一辆Audi,则还需要修改类Person的代码。
依赖倒转原则,其核心思想就是要将这种具体类之间的依赖,尽量转换成抽象依赖,也就是说类Person应该依赖于抽象类ICar,而不是具体的类 Car,这里java就大力推荐了抽象和接口的使用,至于抽象和接口之间的区别。
这个依赖倒转原则在设计模式也体现得非常多,比如说工厂模式和构建模式,个人认为控制反转IoC,其实也可以认为是实现这个原则的一种设计模式。控制反转,其中的控制这个词一直不太理解是什么意思,不过控制反转的另外一种说法也就是依赖注入(dependence injection),个人觉得更易于理解。还是以上文的boy与toyota为例,其核心就是要将boy依赖的对象toyota注入到boy中去,而无需boy自己去引用toyota,这个注入的过程,通常是由一个控制程序来完成的,无需对象去关心。

Public Person{
private ICar car;
public Person(ICar onecar){
  car=onecar;
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
}

调用

Toyota toyota=new Toyota();
Person boy=new Person(toyota);
boy.drive();

这个时候,进行注入并且调用的过程,就很简单了,如下:

Public Person{
private ICar car;
public Person(){
}
public void drive(){
  car.挂档;
  car.踩油门;
  car.打方向;
}
public ICar getCar(){
  return this.car;
}
public void setCar(ICar onecar){
  car=onecar;
}
}

调用方式

Toyota toyota=new Toyota();
Person boy=new Person();
boy.setCar(toyota);
boy.drive();

xml文件中进行配置之后就可以直接取了

<beans>
   <bean id="oneCar" class="Toyota"> <!-- Toyota类是ICar的一个实现-->
   </bean>
   <bean id="onePerson" class="Person"> <!--本例以属性方式注入为例 -->
       <property name="car"> 
           <ref bean="oneCar"></ref>
       </property>
   </bean>
</beans>

Bean实例化的三种方式

1.直接通过构造器生成
2.通过工厂模式静态方法生成
3.通过实例工厂进行生成

对象

//对象
public class Bean {
    public Bean(){
        System.out.println("Bean已经被实例化");
    }
}
//静态工厂模式
public class Bean2Factory {
    public static Bean2 createBean2(){
        return new Bean2();
    }
}
//实例化工厂模式
    public Bean3 createBean3(){
        return new Bean3();
    }
    <!-- 第一种方式:直接通过构造器进行生成 -->
    <bean id ="bean1" class = "com.imook.ioc.demo.Bean1" />
    <!-- 第二种方式:通过工厂模式静态的方法进行生成 -->
    <bean id = "bean2" class="com.imook.ioc.demo.Bean2Factory" factory-method="createBean2" />
    <!-- 第三种方式:通过实例工厂的方法进行生成 -->
    <bean id = "bean3Factory" class="com.imook.ioc.demo.Bean3Factory" />
    <bean id = "bean3" factory-bean="bean3Factory" factory-method="createBean3"/>

获取对象方式

    public void Demo1(){
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        Bean1 bean1 = (Bean1) applicationContext.getBean("bean1");
        Bean2 bena2 = (Bean2) applicationContext.getBean("bean2");
        Bean3 bean3 = (Bean3) applicationContext.getBean("bean3");
    }

***对三种方式的基本理解:
第一种:通过bean的缺省构造函数创建,当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。
第二种:利用静态factory方法创建,可以统一管理各个bean的创建,如各个bean在创建之前需要相同的初始化处理,则可用这个factory方法险进行统一的处理等等。
第三种:利用实例化factory方法创建,即将factory方法也作为了业务bean来控制。
第一种可用于集成其他框架的bean创建管理方法,第二种斜体样式能够使bean和factory的角色互换。
***

引用文章链接,如有侵权请立即联系我,会马上删除
链接: https://www.cnblogs.com/alltime/p/6729295.html.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
08-10
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值