我爱编程

spring入门笔记

2018-03-23  本文已影响0人  _Sisyphus

控制反转: 把创建对象的权利交给框架,在使用过程中直接去得到这个对象;它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup);

Spring 概况

Spring 作用
Spring 适用范围

Spring-IOC 控制反转

接口及面向接口编程
啥是IOC
Spring 的 Bean 配置
  1. 配置:在 spring-ioc.xml 中通过<bean id="bean的id" class="javaBean实现类的全路径"/>配置映射关系
  2. 使用:context.getBean(“配置的Bean的id”)拿到 Bean 对象,调用对应的方法
Bean 的初始化
Spring 常用注入方式

IOC 容器在加载的时候会扫描 xml 文件中 Bean 的相关配置,然后对这些 Bean 进行实例化

Spring Bean

Bean 的配置项
* Id:在整个 IOC 容器中这个 Bean 的唯一标识
* Class:具体要实例化的哪一个类
* Scope:范围,作用域
* Constructor arguments:构造器的参数
* Properties:属性
* Autowiring mode:自动装配的模式
* lazy-initilizition mode:懒加载模式
* initilizition/destruction method:初始化和销毁的方法  

以上配置项共同构成了 Spring IOC 容器中对于 Bean 的配置,使用时理论上只有 Class 是必须的,其它的都可以不配置,但是想从 Bean 容器中得到某一个实例,两种方式:Id 和 Bean 的类型,如果根据 Id 获取,那么 Id 这一项就需要配置,如果是根据类型来获取就只需要获取 Class 这一项。  
Bean 的作用域 (scope)

web 应用相关:

Bean 的生命周期
Bean 的自动装配
Resources&ResourcesLoader

Resources
- UrlResources:Url 对应的资源,根据 Url 地址即可构建
- ClassPathResources:获取类路径下的资源文件【相对路径】
- FileSystemResources:获取文件系统里面的资源【绝对路径】
- ServletContextResources:ServletContext封装的资源,用于访问ServletContext环境下的资源【和web相关】
- InputStreamResources:针对于输入流封装的资源
- ByteArrayResources:针对字节数组封装的资源

ResourcesLoader
对 Resources 进行加载,在 Spring 容器中,所有的 ApplicationContext 都实现了ResourcesLoader 这个接口,都可以获取 Resources 的实例,
Resources src = ctx.getResources(“资源路径”); classpath、file:、http:、

Bean 的自动装配 - Bean 的定义及作用域的注解实现
  1. Classpath 扫描与组件管理

    • 从 Spring3.0 开始,Spring JavaConfig 项目提供了很多特性,包括使用 java 注解而不是 xml 定义 Bean

    • @Component 是一个通用注解,可用于任何 bean

    • @Repository、@Service、@Controller 是 @Component 的子注解,是更有针对性的注解。

      • @Repository 通常用于注解 DAO 层,即持久层
      • @Service 通常用于注解 Service 类,即服务层
      • @Controller 通常用于注解 Controller 类,即控制层(MVC)
    • 注解到类上 Spring 可以自动检测类并注册 Bean 到 ApplicationContext 上

    • 默认情况下,类被发现并注册 bean 的条件是:使用 @Component、@Repository、@Service、@Controller 注解或使用 @Component 的自定义注解。

    • @scope:通常情况下自动查找的 Spring 组件,其 scope 是 singleton,Spring 2.5提供了一个标识scope的注解 @scope(“xxx”)【使用场景:在每一个线程中使用一个 bean 的实例】

    • @Required:表示受影响的 Bean 属性必须在配置时被赋值【不常用】

    • @AutoWired(自动注入):可以理解为一个传统的 set 方法,可以用于变量、set方法、构造方法【常用;默认下,如果因找不到合适的 Bean 将会导致 AutoWired 失败,抛出异常;使用前提,配置扫描的范围

    • @qualifier:使用在 成员变量、方法参数上 作用:缩小范围

  2. 基于 Java 容器的注解

    • @Bean:类似于XMl配置文件中的<bean/> ,配合@Configuration注解使用
    • @ImportResource:引入一个资源
    • @Value(“${属性名}”):获取资源文件中的内容
    • 妈蛋。。。

AOP 概述

AOP:(Aspect Oriented Programming),面向切面编程,通过预编译方式 & 运行期动态代理实现程序功能的统一维护的一种技术。

主要功能:日志统计,性能统计,安全验证,事务处理,异常处理等。

AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

AOP技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

切面是和功能垂直的

AOP实现方式:

相关概念:

Spring AOP 实现:

有接口和无接口Spring AOP 实现区别:

上一篇 下一篇

猜你喜欢

热点阅读