三大框架 之 Spring(IOC控制反转、DI依赖注入)

经常使用词汇

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

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

aspect
[ˈæspekt]数据库

n.
方面;方向;编程

oriented
['ɔ:rɪəntɪd]设计模式

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

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

cascadesession

级联;app

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/>
相关文章
相关标签/搜索