Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
739775ca
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
739775ca
编写于
10月 11, 2011
作者:
C
Chris Beams
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Introduce @EnableAspectJAutoProxy
Issue: SPR-8138
上级
b08a6d32
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
267 addition
and
2 deletion
+267
-2
org.springframework.aop/src/main/resources/org/springframework/aop/config/spring-aop-3.1.xsd
...sources/org/springframework/aop/config/spring-aop-3.1.xsd
+3
-0
org.springframework.context/src/main/java/org/springframework/context/annotation/AspectJAutoProxyConfigurationSelector.java
...ext/annotation/AspectJAutoProxyConfigurationSelector.java
+56
-0
org.springframework.context/src/main/java/org/springframework/context/annotation/Configuration.java
...org/springframework/context/annotation/Configuration.java
+3
-2
org.springframework.context/src/main/java/org/springframework/context/annotation/EnableAspectJAutoProxy.java
...gframework/context/annotation/EnableAspectJAutoProxy.java
+113
-0
org.springframework.context/src/test/java/org/springframework/context/annotation/EnableAspectJAutoProxyTests.java
...ework/context/annotation/EnableAspectJAutoProxyTests.java
+86
-0
spring-framework-reference/src/new-in-3.1.xml
spring-framework-reference/src/new-in-3.1.xml
+6
-0
未找到文件。
org.springframework.aop/src/main/resources/org/springframework/aop/config/spring-aop-3.1.xsd
浏览文件 @
739775ca
...
...
@@ -72,6 +72,9 @@
<xsd:annotation>
<xsd:documentation
source=
"java:org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"
>
<![CDATA[
Enables the use of the @AspectJ style of Spring AOP.
See org.springframework.context.annotation.EnableAspectJAutoProxy Javadoc
for information on code-based alternatives to this XML element.
]]>
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
...
...
org.springframework.context/src/main/java/org/springframework/context/annotation/AspectJAutoProxyConfigurationSelector.java
0 → 100644
浏览文件 @
739775ca
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.context.annotation
;
import
java.util.Map
;
import
org.springframework.aop.config.AopConfigUtils
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.core.type.AnnotationMetadata
;
/**
* Registers an {@link org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator
* AnnotationAwareAspectJAutoProxyCreator} against the current {@link BeanDefinitionRegistry}
* as appropriate based on a given @{@link EnableAspectJAutoProxy} annotation.
*
* @author Chris Beams
* @see EnableAspectJAutoProxy
* @since 3.1
*/
public
class
AspectJAutoProxyConfigurationSelector
implements
ImportSelector
{
/**
* Register, escalate, and configure the AspectJ auto proxy creator. Always return
* an empty array, as no actual {@code @Configuration} classes are required.
*/
public
String
[]
selectImports
(
ImportSelectorContext
context
)
{
BeanDefinitionRegistry
registry
=
context
.
getBeanDefinitionRegistry
();
AnnotationMetadata
importingClassMetadata
=
context
.
getImportingClassMetadata
();
Map
<
String
,
Object
>
enableAJAutoProxy
=
importingClassMetadata
.
getAnnotationAttributes
(
EnableAspectJAutoProxy
.
class
.
getName
());
AopConfigUtils
.
registerAspectJAnnotationAutoProxyCreatorIfNecessary
(
registry
);
if
((
Boolean
)
enableAJAutoProxy
.
get
(
"proxyTargetClass"
))
{
AopConfigUtils
.
forceAutoProxyCreatorToUseClassProxying
(
registry
);
}
return
new
String
[]
{
};
}
}
org.springframework.context/src/main/java/org/springframework/context/annotation/Configuration.java
浏览文件 @
739775ca
...
...
@@ -299,8 +299,9 @@ import org.springframework.stereotype.Component;
* classes using their respective "{@code @Enable}" annotations. See
* {@link org.springframework.scheduling.annotation.EnableAsync @EnableAsync},
* {@link org.springframework.scheduling.annotation.EnableScheduling @EnableScheduling},
* {@link org.springframework.transaction.annotation.EnableTransactionManagement @EnableTransactionManagement}, and
* {@link org.springframework.web.servlet.config.annotation.EnableWebMvc @EnableWebMvc}
* {@link org.springframework.transaction.annotation.EnableTransactionManagement @EnableTransactionManagement},
* {@link org.springframework.context.annotation.EnableAspectJAutoProxy @EnableAspectJAutoProxy},
* and {@link org.springframework.web.servlet.config.annotation.EnableWebMvc @EnableWebMvc}
* for details.
*
* <h2>Constraints when authoring {@code @Configuration} classes</h2>
...
...
org.springframework.context/src/main/java/org/springframework/context/annotation/EnableAspectJAutoProxy.java
0 → 100644
浏览文件 @
739775ca
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.context.annotation
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.ElementType
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
/**
* Enables support for handling components marked with AspectJ's {@code @Aspect} annotation,
* similar to functionality found in Spring's {@code <aop:aspectj-autoproxy>} XML element.
* To be used on @{@link Configuration} classes as follows:
*
* <pre class="code">
* @Configuration
* @EnableAspectJAutoProxy
* public class AppConfig {
* @Bean
* public FooService fooService() {
* return new FooService();
* }
*
* @Bean
* public MyAspect myAspect() {
* return new MyAspect();
* }
* }</pre>
*
* Where {@code FooService} is a typical POJO component and {@code MyAspect} is an
* {@code @Aspect}-style aspect:
*
* <pre class="code">
* public class FooService {
* // various methods
* }</pre>
*
* <pre class="code">
* @Aspect
* public class MyAspect {
* @Before("execution(* FooService+.*(..))")
* public void advice() {
* // advise FooService methods as appropriate
* }
* }</pre>
*
* In the scenario above, {@code @EnableAspectJAutoProxy} ensures that {@code MyAspect}
* will be properly processed and that {@code FooService} will be proxied mixing in the
* advice that it contributes.
*
* <p>Users can control the type of proxy that gets created for {@code FooService} using
* the {@link #proxyTargetClass()} attribute. The following enables CGLIB-style 'subclass'
* proxies as opposed to the default interface-based JDK proxy approach.
* <pre class="code">
* @Configuration
* @EnableAspectJAutoProxy(proxyTargetClass=true)
* public class AppConfig {
* // ...
* }</pre>
*
* <p>Note that {@code @Aspect} beans may be component-scanned like any other. Simply
* mark the aspect with both {@code @Aspect} and {@code @Component}:
* <pre class="code">
* package com.foo;
*
* @Component
* public class FooService { ... }
*
* @Aspect
* @Component
* public class MyAspect { ... }</pre>
*
* Then use the @{@link ComponentScan} annotation to pick both up:
* <pre class="code">
* @Configuration
* @ComponentScan("com.foo")
* @EnableAspectJAutoProxy
* public class AppConfig {
* // no explicit @Bean definitions required
* }</pre>
*
* @author Chris Beams
* @since 3.1
* @see org.aspectj.lang.annotation.Aspect
*/
@Target
(
ElementType
.
TYPE
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Import
(
AspectJAutoProxyConfigurationSelector
.
class
)
@Documented
public
@interface
EnableAspectJAutoProxy
{
/**
* Indicate whether subclass-based (CGLIB) proxies are to be created as opposed
* to standard Java interface-based proxies. The default is {@code false}.
*/
boolean
proxyTargetClass
()
default
false
;
}
org.springframework.context/src/test/java/org/springframework/context/annotation/EnableAspectJAutoProxyTests.java
0 → 100644
浏览文件 @
739775ca
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
import org.springframework.aop.aspectj.annotation.EnableAspectJAutoProxy;
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.springframework.context.annotation
;
import
static
org
.
hamcrest
.
CoreMatchers
.
is
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
org.junit.Test
;
import
org.springframework.aop.support.AopUtils
;
import
org.springframework.context.ApplicationContext
;
import
example.scannable.FooService
;
import
example.scannable.ServiceInvocationCounter
;
/**
* @author Juergen Hoeller
* @author Chris Beams
*/
public
class
EnableAspectJAutoProxyTests
{
@Configuration
@ComponentScan
(
"example.scannable"
)
@EnableAspectJAutoProxy
static
class
Config_WithJDKProxy
{
}
@Configuration
@ComponentScan
(
"example.scannable"
)
@EnableAspectJAutoProxy
(
proxyTargetClass
=
true
)
static
class
Config_WithCGLIBProxy
{
}
@Test
public
void
withJDKProxy
()
throws
Exception
{
ApplicationContext
ctx
=
new
AnnotationConfigApplicationContext
(
Config_WithJDKProxy
.
class
);
aspectIsApplied
(
ctx
);
assertThat
(
AopUtils
.
isJdkDynamicProxy
(
ctx
.
getBean
(
FooService
.
class
)),
is
(
true
));
}
@Test
public
void
withCGLIBProxy
()
throws
Exception
{
ApplicationContext
ctx
=
new
AnnotationConfigApplicationContext
(
Config_WithCGLIBProxy
.
class
);
aspectIsApplied
(
ctx
);
assertThat
(
AopUtils
.
isCglibProxy
(
ctx
.
getBean
(
FooService
.
class
)),
is
(
true
));
}
private
void
aspectIsApplied
(
ApplicationContext
ctx
)
throws
Exception
{
FooService
fooService
=
ctx
.
getBean
(
FooService
.
class
);
ServiceInvocationCounter
counter
=
ctx
.
getBean
(
ServiceInvocationCounter
.
class
);
assertEquals
(
0
,
counter
.
getCount
());
assertTrue
(
fooService
.
isInitCalled
());
assertEquals
(
1
,
counter
.
getCount
());
String
value
=
fooService
.
foo
(
1
);
assertEquals
(
"bar"
,
value
);
assertEquals
(
2
,
counter
.
getCount
());
fooService
.
foo
(
1
);
assertEquals
(
3
,
counter
.
getCount
());
}
}
\ No newline at end of file
spring-framework-reference/src/new-in-3.1.xml
浏览文件 @
739775ca
...
...
@@ -128,6 +128,12 @@
Javadoc
</para>
</listitem>
<listitem>
<para>
See
org.springframework.context.annotation.EnableAspectJAutoProxy
Javadoc
</para>
</listitem>
<listitem>
<para>
See org.springframework.scheduling.annotation.EnableScheduling
Javadoc
</para>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录