您的位置:首页 > 编程语言 > Java开发

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"/>



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
章节导航