Spring IOC/ AOP 笔记
扫描 Bean
以下主要是使用基于注解方式配置
组件扫描(一般用于自己写的类)
添加 @Component 注解,被扫描到后自动作为 Bean 组件
@ComponentScan 扫描配置的位置,将添加了@Component 注解的类装配为 Bean
默认扫描和此注解所在的包中
如果要扫描特定的包,添加属性
(basePackages="cc" 或 {"dd","dd1"})
,如果不想使用字符串,可以使用
(basePackageClasses = {xx.class, aa.class})
,这样这些类所在的包将作为组件扫描的基础包
多个(种)配置文件互相引用
JavaConfig 互相引用:
@Import({aa.class, bb.class})
JavaConfig 引用 xml 配置:
@ImportResource()
xml 互相引用:
<import resource="" />
xml 引用 JavaConfig:
<bean class="aa.BbConfig" />
显示配置(一般用于第三方的类)
@Bean,默认 id 为方法名,显示指定使用 (name = "")
Bean 间引用
在 @Bean 对应的方法中直接调用另一个 @Bean 的方法
在 @Bean 方法的参数中添加需要的类,Spring 会自动注入
自动装配的歧义性
首选Bean 添加
@Primary
注入处 使用限定符
@Qualifier("<选择的Bean id>")
Bean 的作用域
单例(Singleton): 在整个应用中,只创建 Bean 的一个例
原型(Prototype): 每次注入时,都会创建一个新的 Bean 实例
会话(Session): 在 Web 应用中,为每个会话创建一个 Bean 实例
请求(Request): 在 Web 应用中,为每个请求创建一个 Bean 实例
使用时在 Bean 上添加对应注解
单例: @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
原型: @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
会话: @Scope(WebApplicationContext.SCOPE_SESSION)
请求: @Scope(WebApplicationContext.SCOPE_REQUEST)
如果使用会话或者请求作用域,那么当其应用(注入)到单例 Bean 时,需要配置代理
如果配置会话或请求作用域的 Bean 是一个接口,那么@Scope(value=WebApplicationContext.SCOPT_SESSION, proxyMode=ScopedProxyMode.INTERFACES)
;如果是一个类,那么需要将 proxyMode 改为ScopedProxyMode.TARGET_CLASS
注入配置文件中的值
@Configuration
@PropertySource("classpath:app.properties")
public class ExpressiveConfig {
@Autowired
Environment env; @Bean
public BlankDisc disc() {
return new BlankDisc(env.getProperty("dict.title"));
}
}
AOP
Spring 切面可以应用 5 种类型的通知:
前置通知 (Before)
后置通知 (After)
返回通知 (After-returning) : 成功执行后调用
异常通知 (After-throwing)
环绕通知 (Around)
Spring 提供了 4 种类型的 AOP 支持:
基于代理的经典 Spring AOP
纯 POJO 切面
@AspectJ 注解驱动的切面
注入式 AspectJ 切面(适用于 Spring 各版本)
@Aspect
@Component // 注册为 Bean
public class Audience {
@Before("execution(** concert.Performance.perform(..))")
public void silenceCellPhones() {
// silenceCellPhones
} @Before("execution(** concert.Performance.perform(..))")
public void takeSeats() {
// takeSeats
}
}
对于相同的切点,可以在一处定义,结果如下
@Aspect
@Component // 注册为 Bean
public class Audience {
@Pointcut("execution(** concert.Performance.perform(..))")
pulbic void performance() {} @Before("performance()")
public void silenceCellPhones() {
// silenceCellPhones
} @Before("performance()")
public void takeSeats() {
// takeSeats
}
}
JavaConfig 配置
@Configuration
@EnableAspectJAutoProxy // 启用 AspectJ 自动代理
@ComponentScan
public class AopConfig { }
对于 xml 配置为:
<aop:aspectj-autoproxy proxy-target-class="true" />
Spring IOC/ AOP 笔记的更多相关文章
- spring ioc aop 原理
spring ioc aop 原理 spring ioc aop 的原理 spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分. 在传统的程序设计中,当调 ...
- Spring IOC AOP的原理 如果让你自己设计IOC,AOP如何处理(百度)
百度的面试官问,如果让你自己设计一个IOC,和AOP,如何设计, 我把IOC的过程答出来了,但是明显不对, (1) IOC 利用了反射,自己有个id,classtype,hashmap,所有的功能都在 ...
- Spring IOC + AOP 的实现
Spring思想很不错,尽量减少侵入式编程.现在了解到的Spring提供的功能有,DI,IOC,数据库操作,AOP,MVC.针对DI,AOP写了一些小DEMO PS:AOP真的很棒 代码参考:< ...
- spring Ioc Aop整合
之前用DWP项目做spring的IOC,xml总是提示有问题,之后改用maven通过. 之后将这一块的内容补充. 仔细考虑一下spring 的IOC是无处不在的,演示Aop也需要依赖spring的IO ...
- spring ioc aop 理解
OC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果 ...
- spring IOC DI AOP MVC 事务, mybatis 源码解读
demo https://gitee.com/easybao/aop.git spring DI运行时序 AbstractApplicationContext类的 refresh()方法 1: pre ...
- Spring学习笔记(二)Spring基础AOP、IOC
Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...
- [原创]java WEB学习笔记105:Spring学习---AOP介绍,相关概念,使用AOP,利用 方法签名 编写 AspectJ 切入点表达式
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- 对于Spring中AOP,DI,IoC概念的理解
IOC IoC(inversion of Control),控制反转.就好像敏捷开发和SCRUM一样,不是什么技术,而是一种方法论,一种工程化的思想.使用IoC的思想意味着你将设计好的对象交给容器控制 ...
随机推荐
- Spring Boot从入门到精通(八)日志管理实现和配置信息分析
Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...
- Redis01——Redis究竟支持哪些数据结构
Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指 ...
- JVM系列八(虚拟机性能监控命令).
jps JVM Process Status Tool,显示指定系统内所有的 HotSpot 虚拟机进程.显示信息包括虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID(Local Virtual M ...
- R的plotmath
plotmath plotmath {grDevices}:Mathematical Annotation in R # Copyright (C) 2002-2016 The R Core Team ...
- ASP.NET页面使用AjaxPro2完成JS调用后台方法
一.首先下载AjaxPro.2.dll(附下载地址) 百度网盘链接:https://pan.baidu.com/s/1r87DE1Tza9F4NbJwTCS1AQ 提取码:10p6 二.在Visual ...
- JDK中线程池参详细解析
在jdk中为我们提供了三种创建线程池的方式,但是在阿里的编码规范里面都是明确禁止使用这三种api去创建线程池,推荐我们去自定义线程池.为什么? 要回答为什么,我们需要明白创建线程池时,各参数的作用: ...
- 源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)
要实现限流.熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息.例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑 ...
- Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现
影响版本 Apache Shiro <= 1.2.4 产生原因 shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cook ...
- RTSP协议进行视频取流的方法、注意点及python实现
在视频应用中,我们一般都需要基于摄像头或录像机的视频流进行二次开发,那么就涉及到如何将视频流取出来. 在摄像机安装好之后,一般是通过局域网与本地的服务器进行连接,要取录像机的视频流就要在局域网范围内进 ...
- 从 ASP.NET Core 3.1 迁移到 5.0
3月中旬,微软官方已经发布了dotnet 5的第一个预览版:5.0.0-preview.1. dotnet core经过前几个版本的发展和沉淀,到3.1已经基本趋于稳定. 所以从.net core 3 ...