`

Spring学习笔记(一)

阅读更多

 

Spring的作用:

  • 能够降低组件之间的耦合度,实现软件之间的解耦
  • 可以使用Spring容器的众多服务,比如:事务管理器.当我们使用事务管理器时,开发人员不需要手动控制事务,也不需要处理复杂的事务传播.
  • Spring容器提供单例模式的支持
  • 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等.
  • 容器提供了很多辅助器,这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate等.
  • Spring提供了主流应用框架的支持,如:集成Hibernate、JPA、Struts等,便于应用程序的开发

Spring的核心技术是IoC(Inversion of Control)和AOP(Aspect-oriented programming).

IoC还有另一个名字,叫DI(Dependency Injection),称为"依赖注入".所谓依赖注入就是指,在运行期间,由外部容器动态地将依赖对象注入到组件中.

依赖注入有三种方式:

  1. 使用构造器注入
  2. 使用属性setter注入
  3. 使用Field注入(利用注解)

Bean的装配

Spring提供三种实例化Bean的方式:

使用类构造器的方式

<bean id=”唯一标识符” class=”完整类名”></bean>

使用静态工厂的方式

<bean id="唯一标识符"

class="工厂的完整类名" factory-method="需要执行工厂的哪个方法的方法名" />

使用工厂实例的方式

<bean id=“唯一标识符1" class="工厂的完整类名"/>

<bean id="唯一标识符2" factory-bean=“唯一标识符1"

factory-method="需要执行工厂的哪个方法的方法名" />

Bean在实例化的时候默认只有一个,不管获得几次,都是同一个Bean,不过Spring提供了修改Bean作用域的属性,有几种取值:

singleton,prototype,request,session,global session.有几个都没什么用.

除了配置的注入方式以外,还可以使用注解的方式进行注入,在JAVA代码中使用@Autowired或@Resource注解方式进行装配.不过在装配之前,需要引入context命名空间,虽然Spring支持注解的解析,但是默认解析的"开关"没有打开,必须在配置文件里添加<context:annotation-config />标签,这个标签隐式的注册了Spring对注解进行解析的处理器:

AutowiredAnnotationBeanPostProcessor,CommonAnnotationBeanPostProcessor,

PersistenceAnnotationBeanPostProcessor,RequiredAnnotationBeanPostProcessor

@Autowired可以作用在构造器、字段和方法上,默认以类型进行查找,默认情况下它要求的依赖对象必须存在,如果可以允许不存在,则需要设置它的required属性值为false.如果想以名称进行查找,可以结合@Qualifier注解一起使用,如@Autowired @Qualifier("指定名称").@Qualifier注解还可以指定在构造器或者方法的参数在,如:

@Autowired 
public void setPersonDao(@Qualifier("personDao") PersonDao personDao) {//用于属性的set方法上 
      this.personDao = personDao; 
}

@Resource可以作用在类、方法和字段上,默认以名称进行查找,如果找不到相应的Bean,则以类型进行查找.如果指定了name属性,则只按名称进行查找.

另外,Spring还支持Bean的自动装配:

<bean id=“foo” class=“...Foo”  autowire=“autowire type”>

autowire的取值包含(byType,byName,constructor,autodetecte),只用了解就行了,不常用,以免出现不可预知的后果.

此外,项目中通常会有上百个组件,如果这些组件全部采用在配置文件中通过Bean的方式来配置,则会明显增加配置文件的体积,查找和维护起来也会相关不便.所以,Spring2.5提供了自动扫描组件的方式来配置组件,它通过在类路径下寻找标了@Component、@Service、@Controller和@Repository注解的类,并把这些类纳入到Spring的容器中进行管理.

要使用自动扫描机制,需要引入context命名空间,并且需要在配置文件里面加上:

<context:component-scan base-package="包名"/>.

这个标签将扫描指定包(含子包)下的所有组件.并且把AutowiredAnnotationBeanPostProcessor 和CommonAnnotationBeanPostProcessor隐式地被包括进来以进行注解解析.

AOP--面向切面编程

AOP代理对象

如果目标对象实现了接口,则代理对象也实现同样的接口,否则使用cglib代理,则Spring有两种代理方式:

  1. 若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
  2. 若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

备注: 

对接口创建代理优于对类创建代理,因为这将产生更加松耦合的系统.

标记为final的方法无法得到通知,Spring需要为目标类产生子类,需要覆写被通知的方法,然后将通知织入.final方法不允许被覆写.

 

 

 

 

AOP中有几个概念,这些概念我们经常会用到,大数人也经常在程序中写出来,但是自己不知道:

Jointpoint(连接点)

连接点就是被拦截到的那个点,在Spring中,"点"指的是方法,因为Spring只支持方法类型的连接点.也就是说,哪个方法现在被拦截到了,我们就把这个方法称为连接点.

Pointcut(切入点)

切入点就是我们要拦截哪些连接点.比如你的工作是查水表,你负责的那个区域就是切入点,你现在正在查的那家,就是连接点.

Advice(通知)

通知就是拦截到连接点之后要做的事情,比如乘地铁,你不带包就不用安检,如果你带了包,就要安检(被拦截到了),然后X射线检查你的包就是一个通知.通知分为:前置通知,后置通知,最终通知,异常通知,环绕通知五种.

Aspect(切面)

是通知和切入点的结合,通知和切入点共同定义了关于切面的全部内容---它的功能、在何时和何地完成其功能,简单的说,通知所在的类,并且定义了切入点,那么这个类就是切面.

Target(目标对象)

需要代理的对象.

Weaving(织入)

把切面应用到目标对象来创建一个代理对象的过程就叫织入.

Introduction(引入)

引入就是在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.

 

更多信息请查看 java进阶网 http://www.javady.com

2
0
分享到:
评论

相关推荐

    Spring 学习笔记一

    Spring 是一个开源的 Java 应用框架,它主要解决了企业应用开发的复杂性,提供了一种简化的方式来构建和配置应用程序。Spring 的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    Springcloud学习笔记.md

    Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...

    Spring学习笔记( spring视频笔记)

    Spring学习笔记( spring视频笔记)

    Spring学习笔记 自我总结

    spring学习笔记

    Spring学习笔记.zip

    根据提供的压缩包文件名,我们可以推测这是一个逐步学习Spring的系列笔记。从"Spring_day1"开始,可能涵盖了Spring的基础概念、环境搭建和基本配置。"Spring_day2"可能涉及了依赖注入和AOP的深入讲解。"Spring_day3...

    Spring学习笔记+学习源码.zip

    这份"Spring学习笔记+学习源码.zip"资源包含了深入学习Spring及其相关技术的知识点,以及实践代码,对提升Spring技能将大有裨益。 首先,我们来详细讨论Spring框架的主要组件和功能: 1. **依赖注入(Dependency ...

    Spring学习笔记&源码

    本资料“Spring学习笔记&源码”是基于网易云课堂黑马程序员的Spring四天精通课程,旨在帮助学习者深入理解和实践Spring框架。 笔记部分可能会涵盖以下内容: 1. **Spring概述**:介绍Spring框架的历史、特点和主要...

    Spring学习笔记(马士兵spring视频笔记).doc

    Spring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).docSpring学习笔记(马士兵spring视频笔记).doc

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    javaSpring学习笔记

    “Java Spring学习笔记”是一份宝贵的资源,专门为想要学习和掌握Java Spring框架的开发者而设计。这份学习笔记提供了详细而系统的教程和实践指南,帮助初学者快速入门,并带领已经有一定经验的开发者深入理解和应用...

    Spring Cloud 学习笔记.pdf

    Spring Cloud是一套微服务架构下的分布式系统解决方案,提供了在分布式系统环境下快速构建一些常见模式的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...

    spring学习笔记

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...

    springsecurity学习笔记

    在"springsecurity学习笔记"中,你可能会涉及以下主题: - Spring Security的基本配置,包括web安全配置和全局安全配置。 - 如何自定义认证和授权流程,比如实现自定义的AuthenticationProvider和...

    尚学堂Spring学习笔记

    "尚学堂Spring学习笔记" 本文档记录了尚学堂Spring学习笔记的重要知识点,涵盖了Spring配置文件的设置、普通属性的注入、自定义属性编辑器、公共属性的注入、Spring注解等内容。 一、Spring配置文件的设置 在...

    Spring学习笔记.doc

    ### Spring学习笔记知识点详解 #### 一、Spring框架概述 **1.1 什么是Spring** Spring框架是一个开源的轻量级应用框架,主要用于简化企业级应用程序的开发过程。它的核心特性在于提供了一种灵活的方式来组织和...

    Spring6学习笔记

    Spring6学习笔记,师承老杜

    Spring学习笔记

    Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记Spring学习笔记

    Spring学习笔记(一)

    NULL 博文链接:https://luan.iteye.com/blog/1717082

    Spring学习笔记.xmind

    Spring学习笔记.xmind

Global site tag (gtag.js) - Google Analytics