zoukankan      html  css  js  c++  java
  • 三大框架 之 Spring(IOC控制反转、DI依赖注入)

    常用词汇

    ORM(Object Relational Mapping)对象到关系的映射

    AOP(Aspect Oriented Programming)面向切面编程

    aspect
    [ˈæspekt]

    n.
    方面;方向;

    oriented
    ['ɔ:rɪəntɪd]

    adj.
    面向;定向的;以…为方向的;定方向

    Proxy
    代理服务器;即Proxy服务器;

    cascade

    级联;

    interceptor
    [ˌɪntəˈseptə(r)]

    n.
    拦截器

    template
    [ˈtempleɪt]
    n.
    样板;模板;型板;模框;标准

    xmlns
    命名空间;名字空间;名称空间

    schema
    [ˈskiːmə]
    n.
    提纲


    left join与left outer join的区别

    那就是没有区别

    对,就是没有区别

    left join 是left outer join的简写,left join默认是outer属性的。

    https://zhidao.baidu.com/question/72568852.html

    SQL LEFT JOIN 百度百科

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。在某些数据库中, LEFT JOIN 也称为 LEFT OUTER JOIN。

    Struts2的标签库导入

    (1)在JSP页面中使用如下代码来导入Struts2标签库:

    pStruts 2的所有标签库都放在/struts-tags这个Uri下面。因此可用如下代码导入:

    <%@ taglib prefix=“s” uri=“/struts-tags”%>
    

    (2)使用指定标签:

    <s:abc .../>
    

    IOC和DI的概念

    • IOC -- Inverse of Control,控制反转,将对象的创建权反转给Spring!!
    • DI -- Dependency Injection,依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件中!!

    DI和IOC的关系: DI不能单独存在,DI需要在IOC的基础上来完成.

    这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现,使用接口的引用调用的方法,永远不需要改变

    Spring

    Spring概述

    什么是Spring

    • Spring是一个开放源代码的设计层面框架
    • 他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
    • Spring是于2003 年兴起的一个轻量级的Java 开发框架
    • 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架

    spring特点

    1.方便解耦,简化开发

    • 通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
    • 有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

    2.AOP编程的支持

    • 通过Spring提供的AOP功能,方便进行面向切面的编程,
    • 许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

    3.声明式事务的支持

    • 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来
    • 通过声明式方式灵活地进行事务的管理,提高开发效率和质量

    4.方便程序的测试

    • 可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
    • 例如:Spring对Junit4支持,可以通过注解方便的测试Spring程序。

    5.方便集成各种优秀框架

    • Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。

    6.降低Java EE API的使用难度

    • Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等),提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。

    7.Java 源码是经典学习范例

    • Spring的源码设计精妙、结构清晰、匠心独运,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。
    • Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java技术水平和应用开发水平,学习和研究Spring源码将会使你收到意想不到的效果。

    下载

    下载地址

    IOC

    什么IOC

    • IOC: Inversion of Control(控制反转)
    • 控制反转:将对象的创建权反转给(交给)Spring

    传统开发模式

    业务和实现类过于紧密,底层业务要修改源代码

    通过工厂可以实现,接口与实现业务的分离

    在工厂内部使用配置文件加载

    使用spring-IOC(需新建applicationContext.xml)

    1.添加jar包
    2.创建配置文件
    ​ 通常名称起为applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    	http://www.springframework.org/schema/beans/spring-beans.xsd">
    </beans>
    


    3.添加配置文件

    4.测试使用

    DI

    依赖注入

    • 前提必须有IOC的环境
    • Spring管理这个类的时候才能将类的依赖的属性值注入(设置)进来
    • 依赖注入:给spring管理类当中依赖的属性,通过配置文件进行赋值的过程

    传统方式

    DI方式

    1.实现类当中的属性要提供set方法

    2.在配置文件当中配置依赖注入

    3.测试

    Spring的工厂类

    BeanFactory

    • 老版本使用方式
    • 当调用getBean的时候才会创建实例对象

    ApplicationContext

    • 新版本使用方式
    • 当加载配置文件时候就会创建实例对象

    ApplicationContext实现类

    ClassPathXmlApplicationContext加载类路径下的配置文件

    FileSystemXmlApplicationContext加载文件系统下的配置文件

    Bean相关配置

    名称与标识

    id
    	使用了约束中的唯一约束。里面不能出现特殊字符的
    name
    	没有使用约束中的唯一约束。里面可以出现特殊字符
    

    设置对象的生命周期方法

    init-method
    	Bean被初始化的时候执行的方法
    destroy-method
    	Bean被销毁的时候执行的方法(Bean是单例创建,工厂关闭)
    

    示例

    Bean的作用范围的配置(即scope属性值)

    singleton
    	默认的,Spring会采用单例模式创建这个对象。
    	使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。
    prototype
    	多例模式。
    	使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。
    request
    	应用在web项目中,Spring创建这个类以后,将这个对象存入到request范围中。
    	该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适用于WebApplicationContext环境。
    session
    	应用在web项目中,Spring创建这个类以后,将这个对象存入到session范围中
    	该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。
    globalsession
    	应用在web项目中,必须在porlet(基于Java的Web组件,子域名)环境下使用。但是如果没有这种环境,相对于session。
    	该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。
    

    ​ 示例

    工厂实例化的方式

    无参构造-默认

    静态工厂实例化

    实例工厂实例化

    分模块配置

    在加载时,添加多个配置文件名称

    在一个配置文件当中引入另一个配置文件

    Spring属性注入

    构造方法的方式的属性注入

    Set方法的属性注入

    Set方法设置对象类型的属性


    P名称空间的属性注入

    使用p名称空间,就不需要写那那么多的property
    使用时,要添加名称空间

    xmlns:p="http://www.springframework.org/schema/p"
    

    spEL表达式的属性注入

    集合类型属性注入

    数组

    List集合

    Set集合

    Map集合

    IOC注解方式快速入门

    在spring4之后,想要使用注解形式,必须得要引入aop的包

    在配置文件当中,还得要引入一个context约束

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	   xmlns:context="http://www.springframework.org/schema/context"
    	   xsi:schemaLocation="http://www.springframework.org/schema/beans
    		http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context
    		http://www.springframework.org/schema/context/spring-context.xsd">
    </beans>
    

    配置组件扫描

    哪个包下的类型使用组合扫描

    在类开始位置上添加注解

    使用注解注入属性

    • 可以不用提供set方法,直接在直接名上添加@value("值")
    • 如果提供了set方法,在set方法上添加@value("值");

    IOC注解详解

    @Component

    修改一个类,将这个类交给Spring管理  相当于在配置文件当中配置
    <bean id=""  class="">
    

    @Component三个衍生注解

    为了更好的进行分层,Spring可以使用其它三个注解,功能类似
    目前使用哪一个功能都一样, 后期可能会添加一些属于各自的属性

    @Controller

    ​ web层

    @Service

    ​ service层

    @Repository

    ​ dao层

    属性注入

    @Value

    ​ 设置普通属性值

    @Autowired

    • 设置对象类型的属性值

    • 直接使用这种方式,是按照类型完全属性注入

    • 不需要在注解上使用id名称

    • 习惯是按照名称完成属性注入
      必须让@Autowired注解与@Qualifier一起使用

    单独使用@Resource

    @PostConstruct

    ​ 初始化方法

    @PreDestroy

    ​ 销毁方法

    @scope

    ​ 作用范围

    XML与注解比较

    • XML可以适用任何场景 ,结构清晰,维护方便
    • 注解不是自己提供的类使用不了,开发简单方便

    XML与注解整合开发

    • XML管理Bean
    • 注解完成属性注入
    • 使用过程中, 可以不用扫描,扫描是为了类上的注解
    • 在没有扫描的情况下, 使用属性注解@Resource @Value @Autowired @Qulifier

    <context:annotation-config/>
    
  • 相关阅读:
    Linux下查找大文件以及目录
    Linux 下定时备份数据库以及删除缓存
    java中main方法的 (String []args)
    RabbitMQ消息队列(二):”Hello, World“
    maven 多模块项目
    java 接口的作用和好处
    Centos下使用压缩包安装MySQL5.7
    修复mysql:[ERROR] Native table ‘performance_schema’
    连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
    centos6下无法使用lsof命令"-bash: lsof: command not found"
  • 原文地址:https://www.cnblogs.com/mumuyinxin/p/10738824.html
Copyright © 2011-2022 走看看