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的思想意味着你将设计好的对象交给容器控制 ...
随机推荐
- CSS 文本截断方案
单行截断 .ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } 此方法兼容到ie6过.不过只能单行 ...
- 初识JVM:(一)JVM工作原理和流程
本文主要参考:http://blog.csdn.net/CSDN_980979768/article/details/47281037?locationNum=7&fps=1 声明:主要用于个 ...
- H5页面,输入框的光标,如果页面上下滑动光标停留在页面上,除了输入框外,松手过了一段时间才跑回输入框里面
有点类似这种情况 其中一个博主描述得比较详细,主要还有图 我是直接在App.vue主文件那里添加一下代码,主要是添加一个监听器,如果touchmove的时候就会触发让其失焦,就会消失那个光标,需要再次 ...
- 建议13:禁用Function构造函数
定义函数的方法包括3种:function语句,Function构造函数和函数直接量.不管用哪种方法定义函数,它们都是Function对象的实例,并将继承Function对象所有默认或自定义的方法和属性 ...
- 浅谈ASP.NET Core中的DI
DI的一些事 传送门马丁大叔的文章 什么是依赖注入(DI: Dependency Injection)? 依赖注入(DI)是一种面向对象的软件设计模式,主要是帮助开发人员开发出松耦合的应用程序 ...
- C++之 ostream详细用法
前言 在 C++中,ostream表示输出流,英文”output stream“的简称.在 C++中常见的输出流对象就是标准输出流cout,很少自定义ostream的对象,更多的是直接使用cout.那 ...
- uni-app 遮罩模板
1. common新建mask.vue文件. <template> <view> <view class="cpt-mask"> </vi ...
- python多重继承的属性和方法调用顺序问题和对迭代器的初步理解
推荐阅读:https://www.cnblogs.com/bigb/p/11650707.html 计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数, ...
- SpringMVC框架——转发与重定向
网上摘取一段大神总结的转发与重定向的区别,如下: 转发(服务端行为) 形式:request.getRequestDispatcher().forward(request,response) 转发在服务 ...
- Proteomic Profiling of Paired Interstitial Fluids Reveals Dysregulated Pathways and Salivary NID1 as a Biomarker of Oral Cavity Squamous Cell Carcinoma (解读人:张聪敏)
文献名:Proteomic Profiling of Paired Interstitial Fluids Reveals Dysregulated Pathways and Salivary NID ...