Spring笔记

Spring

Spring 是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

l  目的:解决企业应用开发的复杂性。

l  功能:使用基本的JavaBean代替EJB。

l  范围:任何Java应用。

 

优点:

l  低侵入式,代码污染低。

l  Write Once,Run Anywhere

l  DI有效降低了耦合度。

l  AOP提供了通用任务的集中管理。

l  ORM和DAO简化了对数据库访问。

l  高度开放性,并不强制。

 

好处:

l  可以有效组织中间层对象。

l  使用统一的配置文件。

l  促进良好编程习惯,减少编程代价。

l  易于单元测试。

l  使EJB成为一种备选

l  为数据存取提供了一致的框架。

 

Spring核心模块:

l  核心容器(Spring Core)

l  应用上下文(SpringContext)

l  AOP模块(Spring AOP)

l  JDBC和DAO模块(Spring DAO)

l  对象实体映射(SpringORM)

l  Web模块(Spring Web)

l  MVC模块(Spring Web MVC)



Spring IoC

IoC(Inversion ofControl,控制反转)是Spring的核心,贯穿始终。IoC对Spring来说,就是由Spring来负责控制对象的生命周期和对象间的关系;

 

         把负责系统分解成相互合作的对象:


 

         依赖注入(DI,Dependency Injection):指通过引入IoC容器,利用依赖关系注入的方式,实现对象之间的解耦。

 

简单理解:

IoC控制反转:说的是创建对象实例的控制权从代码控制剥离到IoC容器控制,实际就是你在xml文件控制,侧重于原理。

DI依赖注入:说的是穿件对象实例时,为这个对象注入属性值或者其他对象实例,侧重于实现。

 

Spring AOP

AOP:面向对切面编程,专门用于处理系统中分布于各个模块中的交叉关注点的问题,在Java EE 应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案

 

通俗理解:一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其他方式,比如Spring中可以通过xml配置文件。这样就使得A不需要知道服务组件B是怎样的,只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。


Spring核心开发包:

Spring Core 包含基本核心工具类,也是其他组件的基本核心

Spring beans 访问配置文件,创建管理bean,控制反转、依赖注入

Spring AOP 声明性的事务管理、日志引入等

Spring Context Spring applicationContext相关特性,JNDI、校验


IoC深入理解

IoC是Spring容器的内核,AOP、声明式事务等都依赖于此功能,它涉及代码解耦、设计模式、代码优化等。

字面意思:控制、反转。

DI概念的引入:让调用类对某一接口实现类的依赖关系,由第三方注入,以移除调用类对某一接口实现的依赖

 

IoC的注入类型(Spring作为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作):

构造函数注入

属性注入

接口注入


<!--实现类的实例化-->
<bean id="world" class="com.HelloWorld"/>

<!--通过上面实例的hello属性建立依赖关系-->
<bean id="person" class="com.Person">
    <property name="hello" ref="world"/>
</bean>

Java反射机制:通过程序化的方式间接对Class的对象实例操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构造函数、属性和方法等。

public static void testRefect () throws Exception {
    //获取类装载器
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    //加载Car类
    Class clazz = classLoader.loadClass("com.mafei.Car");
    //获取该类的构造方法
    Constructor cons = clazz.getDeclaredConstructor();
    //实例化该类(无参)
    Car car = (Car) cons.newInstance();
    //获取方法
    Method setBrand = clazz.getDeclaredMethod("setBrand", String.class);
    Method setColor = clazz.getDeclaredMethod("setColor", String.class);
    Method setMaxSpeed = clazz.getDeclaredMethod("setMaxSpeed", String.class);
    Method run = clazz.getDeclaredMethod("run");
    //执行方法
    setBrand.invoke(car, "劳斯莱斯");
    setColor.invoke(car, "红色");
    setMaxSpeed.invoke(car, "300");
    run.invoke(car);
    //对该类进行有参实例化
    cons = clazz.getDeclaredConstructor(new Class[]{String.class, String.class, String.class});
    //进行有参实例化
    car = (Car) cons.newInstance("奔驰", "黑色", "350");
    //执行方法
    run.invoke(car);
}


Spring Resource接口,为应用提供了更强大的访问底层资源的能力,Spring使用Resource来装载各种资源(配置文件、国际化属性等),主要方法:

1,  boolean exists() 判断资源是否存在

2,  boolean isOpen() 判断资源是否打开

3,  URL getURL() 如果底层资源可以表示成url,则返回url对象

4,  File getFile() 如果底层资源可以表示成file,则返回file对象

5,  InputStream getInputStream() 返回底层资源输入流

 

资源类型地址前缀:

1,  classpath classpath:com/abyss/bean.xml

2,  File file:/com/abyss/bean.xml

3,  http://http://www.baidu.com/bean.xml

4,  ftp ftp://www.baidu.com/bean.xml

5,  无前缀com/abyss/bean.xml


BeanFactory:是Spring框架最核心的接口,它提供了高级IoC的配置机制。它是一个类工厂,可以创建并管理各种类对象,Spring称这些创建和管理的Java对象为Bean。

 

ApplicationContext:建立在BeanFactory基础上,提供了更多面向应用的功能,提供了国际化支持和框架事件体系,更易于创建实际应用一般成BeanFactory为IoC容器。

 

初始化顺序:

1,  创建配置文件

2,  装载配置文件

3,  启动IoC容器

4,  获取Bean实例


Spring配置文件

         Spring配置文件是用于知道Spring工厂进行Bean的生产、依赖关系注入以及Bean实例分发的“图纸”,它是一个或多个标准的XML文档,J2EE程序员必须学会并灵活应用,来准确表达自己的生产意图

 

Spring容器启动基本条件:

Spring的框架类包

Bean的配置信息

Bean的实现类



Bean的元数据信息:

Bean的实现类

Bean的属性信息

Bean的依赖关系

Bean的行为配置

Bean的创建方式


<?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">
    <bean id="china" class="com.mafei.HelloChina"/>
    <!--实现类的实例化-->
    <bean id="world" class="com.mafei.HelloWorld"/>
    <!--通过上面实例的hello属性建立依赖关系-->
    <bean id="person" class="com.mafei.Person">
        <property name="hello" ref="world"/>
    </bean>
</beans>

Bean的作用域:

         在配置文件中即“Scope”,指Spring容器创建的Bean对象相对于其他Bean对象的请求可见范围。

Singleton:单例化,该实例将被存在单例缓存中。(默认作用域)

Prororype:原型化。

Request:针对每一次的http请求,该实例仅在httpRequest中有效。

Session:针对httpSession,仅在httpSession中有效。

Global Session:全局Session。


Java注解

Java5版本开始,自带了三种标准注解类型:@Override、@Deprecated、@SupressWarinings。

 

Java元注解(注解注解的注解):

@Target 描述注解的使用范围,即描述的注解可以用在什么地方,取值:CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE

@Retention 表示需要在什么级别保存该注解信息(即描述的注解在什么范围内是有效的),用于描述注解的生命周期,取值:SOURCE,CLASS,RUNTIME

@Documented 用于描述其他类型的annotation应该被作为标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。

                   @Inherited标记注解,表示某个被标注的类型是被继承的。

 

Spring表达式语言

基本表达式、类相关表达式、集合相关表达式、其他表达式(模版表达式)


1,  创建解析器使用步骤:

2,  解析表达式

3,  构造上下文

4,  求值

public static void main(String[] args) {
    //创建解析器
    ExpressionParser parser = new SpelExpressionParser();
    //用解析器把字符串解析为表达式
    Expression expression = parser.parseExpression("('Hello'+' World').concat(#end)");
    //构造上下文
    EvaluationContext context = new StandardEvaluationContext();
    //为end赋值
    context.setVariable("end", "!");
    //打印value
    System.out.println(expression.getValue(context));
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值