Kde*_*per 7 aop domain-driven-design hibernate jpa guice
对于丰富的域驱动设计,我想在JPA/Hibernate实体bean上使用Guice依赖注入.我正在寻找与非Spring bean的Spring @configurable注释类似的解决方案.
有人知道图书馆吗?任何代码示例?
您可以使用AspectJ执行此操作.
创建@Configurable注释:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Configurable {
}
Run Code Online (Sandbox Code Playgroud)
创建一个与此类似的AspectJ @Aspect:
@Aspect
public class ConfigurableInjectionAspect {
private Logger log = Logger.getLogger(getClass().getName());
@Pointcut("@within(Configurable) && execution(*.new(..)) && target(instantiated)")
public void classToBeInjectedOnInstantiation(Object instantiated) {}
@After(value = "classToBeInjectedOnInstantiation(instantiated)",
argNames = "instantiated")
public void onInstantiation(Object instantiated) {
Injector injector = InjectorHolder.getInjector();
if (injector == null) {
log.log(Level.WARNING, "Injector not available at this time");
} else {
injector.injectMembers(instantiated);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为您的进样器创建(并使用)保持类:
public final class InjectorHolder {
private static Injector injector;
static void setInjector(Injector injector) {
InjectorHolder.injector = injector;
}
public static Injector getInjector() {
return injector;
}
}
Run Code Online (Sandbox Code Playgroud)
配置META-INF/aop.xml:
<aspectj>
<weaver options="-verbose">
<include within="baz.domain..*"/>
<include within="foo.bar.*"/>
</weaver>
<aspects>
<aspect name="foo.bar.ConfigurableInjectionAspect"/>
</aspects>
</aspectj>
Run Code Online (Sandbox Code Playgroud)
使用aspectjweaver启动VM:
-javaagent:lib/aspectjweaver.jar
Run Code Online (Sandbox Code Playgroud)
注释您的域类:
@Entity
@Table(name = "Users")
@Configurable
public class User {
private String username;
private String nickname;
private String emailAddress;
@Inject
private transient UserRepository userRepository
public User() {}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2187 次 |
最近记录: |