Spring知识点总结

xiaoxiao2021-02-28  154

一、Spring概述 Spring框架的核心是提供了一个容器(一个抽象的东西)。该容器类型是BeanFactory或ApplicationContext(建议用这个类型,它是BeanFactory的子类,功能更多)。

二、IOC 2.1 IOC概念: IOC指的是将控制逻辑交给第三方框架或容器负责(即把Action中的控制逻辑提出来,交给第三方负责),当两个组件关系发生改变时,只需要修改框架或容器的配置即可。

2.2 DI概念 依赖注入,Spring框架采用DI技术实现了IoC控制思想。(setter方法注入、构造方法注入)

三、AOP 3.1 AOP概念 面向方面编程,对单个对象(一对一)的解耦用IOC,而当有个共通组件,它对应多个其他组件(一对多),则解耦用AOP。如拦截器。这也是为何在程序中大量的用IOC,而AOP却用的很少,因为程序中不可能有很多的共通部分。

3.2 AOP相关术语 1)方面(Aspect):指的是封装了共通处理的功能组件。该组件可以作用到某一批目标组件的方法上。 2)连接点(JoinPoint):指的是方面组件和具体的哪一个目标组件的方法有关系。 3)切入点(Pointcut):用于指定目标组件的表达式。指的是方面组件和哪一批目标组件方法有关系。多个连接点组成的集合就是切入点。 4)通知(Advice):用于指定方面组件和目标组件方法之间的作用时机。例如:先执行方面组件再执行目标方法;或先执行目标方法再执行方面组件,分为:前置通知(方面组件在目标方法之前执行)、后置通知(方面组件在目标方法之后执行,目标方法没有抛出异常才执行方面组件)、环绕通知(方面组件在目标方法之前和之后执行。) 5)目标(Target):利用切入点指定的组件和方法。 6)动态代理(AutoProxy):Spring同样采用了动态代理技术实现了AOP机制。 例:

<bean id="loggerBean" class="org.tarena.aop.LoggerBean"></bean> <aop:config> <!--定义切入点,指定目标组件和方法。id:可任意起个名字。expression:指定哪些组件是目标,并作用在这些目标的方法上。下面表示所有Action中的所有方法为切入点--> <aop:pointcut id="actionPointcut" expression="within(org.tarena.action.*)" /> <!--定义方面,将loggerBean对象指定为方面组件,loggerBean从普通Bean组件升级为了方面组件--> <aop:aspect id="loggerAspect" ref="loggerBean"> <!-- aop:before在操作前执行 aop:after操作后执行 --> <!-- 定义通知,aop:before:指定先执行方面组件的logger方法,再执行切入点指定的目标方法。aop:after:与aop:before相反 --> <aop:before pointcut-ref="actionPointcut" method="logger"/> </aop:aspect> </aop:config>

3.3这里细说切入点 切入点用于指定目标组件,Spring提供了多种表达式写法: 1)方法限定表达式:指定哪些方法启用方面组件。 格式:execution(修饰符? 返回类型 方法名(参数列表) throws 异常?) 例: execution(public * * (..)),匹配容器中,所有修饰符是public(不写则是无要求的),返回类型、方法名都没要求,参数列表也不要求的方法。 execution(* set*(..)),匹配容器中,方法以set开头的所有方法。 execution(* org.tarena.CostDAO.*(..)),匹配CostDAO类中的所有方法。 execution(* org.tarena.dao..(..)),匹配dao包下所有类所有方法。 execution(* org.tarena.dao...(..)),匹配dao包及其子包中所有类所有方法。 2)类型限定表达式:指定哪些类型的组件的所有方法启用方面组件(默认就是所有方法都启用,且知道类型,不到方法)。 格式:within(类型) 例: within(com.xyz.service.*),匹配service包下的所有类所有方法 within(com.xyz.service..*),匹配service包及其子包中的所有类所有方法 within(org.tarena.dao.CostDAO),匹配CostDAO所有方法 注意事项:within(com.xyz.service...),为错误的,就到方法名!

四、Spring注解配置 前面说的是通过配置文件的形式将Been交给Spring管理,接下来要说的是通过注解的形式管理Been。 4.1 注解 @Controller(Action组件,负责调Service) @Service(Service组件,负责调DAO,处理一些额外逻辑) @Repository(DAO组件,负责访问数据库)

4.2 组件扫描的使用方法

<!-- 开启组件扫描,base-package指定扫描包路径。使用前提:要有xmlns:context命名空间的引入。base-package="org.tarena"这么写,则dao和action都能被扫描--> <context:component-scan base-package="org.tarena" />

4.3 注入注解标记使用方法 1)@Resource,默认按类型匹配注入(JDK自带的)。 @Resource(name=”需要注入的Bean对象id值”)。 2)@Autowired,默认按类型匹配注入(Spring提供的)。 @Autowired @Qualifier(“需要注入的Bean对象id值”)

待续。。。。。。。。。。。。。。。

转载请注明原文地址: https://www.6miu.com/read-96597.html

最新回复(0)