Spring IOC/ AOP 笔记
2017-08-04 23:20
295 查看
扫描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互相引用:
<importresource=""/>
xml引用JavaConfig:
<beanclass="aa.BbConfig"/>
显示配置(一般用于第三方的类)
@Bean,默认id为方法名,显示指定使用(name="")Bean间引用
在@Bean对应的方法中直接调用另一个@Bean的方法在@Bean方法的参数中添加需要的类,Spring会自动注入
自动装配的歧义性
首选Bean添加@Primary
注入处使用限定符
@Qualifier("<选择的Beanid>")
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") publicclassExpressiveConfig{ @Autowired Environmentenv; @Bean publicBlankDiscdisc(){ returnnewBlankDisc(env.getProperty("dict.title")); } }
AOP
Spring切面可以应用5种类型的通知:前置通知(Before)
后置通知(After)
返回通知(After-returning):成功执行后调用
异常通知(After-throwing)
环绕通知(Around)
Spring提供了4种类型的AOP支持:
基于代理的经典SpringAOP
纯POJO切面
@AspectJ注解驱动的切面
注入式AspectJ切面(适用于Spring各版本)
@Aspect @Component//注册为Bean publicclassAudience{ @Before("execution(**concert.Performance.perform(..))") publicvoidsilenceCellPhones(){ //silenceCellPhones } @Before("execution(**concert.Performance.perform(..))") publicvoidtakeSeats(){ //takeSeats } }
对于相同的切点,可以在一处定义,结果如下
@Aspect @Component//注册为Bean publicclassAudience{ @Pointcut("execution(**concert.Performance.perform(..))") pulbicvoidperformance(){} @Before("performance()") publicvoidsilenceCellPhones(){ //silenceCellPhones } @Before("performance()") publicvoidtakeSeats(){ //takeSeats } }
JavaConfig配置
@Configuration @EnableAspectJAutoProxy//启用AspectJ自动代理 @ComponentScan publicclassAopConfig{ }
对于xml配置为:
<aop:aspectj-autoproxyproxy-target-class="true"/>
相关文章推荐
- 笔记——spring基本使用(控制反转IOC、面向切面编程AOP、声明式事务)
- SSH复习笔记---Spring IOC&AOP
- Spring学习笔记--AOP和IOC、SSH整合
- Spring学习笔记(一) Spring基础IOC、AOP
- spring学习笔记--IOC、aop,以及随…
- Spring学习笔记IOC与AOP实例
- Java Spring IoC与AOP 笔记
- spring学习笔记-- aop及ioc的理解
- 【JavaEE学习笔记】Spring_03_IoC的其他配置方式,AOP浅析
- Spring学习笔记(二)Spring基础AOP、IOC
- Spring AOP学习笔记(3):AOP返回通知&异常通知&环绕通知
- Spring学习笔记-IOC概念篇
- 学习笔记之aop基于IOC容器的配置(MSTzhang)
- Spring学习笔记四(AOP中的通知参数和注解开发)
- Spring中IOC与AOP的理解
- Spring如何实现IOC与AOP的
- [Spring学习笔记 4 ] AOP 概念原理以及java动态代理
- 理解Spring的AOP和Ioc/DI就这么简单
- spring - ioc和aop
- Spring中IOC和AOP的实现原理