这里我想听一些特殊的类初始化;当这些类初始化时,我会做一些动作。
目前我想使用接口或注解,但是如何实现呢?
我们已经解决了这个问题,我们使用了javassist;代码如下:
Configuration conf = (Configuration) entry.getValue();
String clazz = conf.getClazz();
try {
CtClass ctClass = ClassPool.getDefault().get(clazz);
String appendCode = "{com.broada.bsp.gene.config.management.ConfigurationManager.manager.inject(this);\n}";
CtConstructor constructor[] = ctClass.getDeclaredConstructors();
for (CtConstructor ctConstructor : constructor) {
ctConstructor.insertAfter(appendCode);
}
ctClass.toClass();
谢谢你的回答,Himanshu Bhardwaj!
在这里我们不能使用你的解决方案,因为我们不能改变用户新的java对象动作,使用javassist,我们只是在构造函数之后附加come代码,所以用户java新对象,不需要改变他们的行为。
您可以在此处使用观察者设计模式。让一个侦听器类(让它成为单例)公开一些方法,该方法将在构造函数中调用。因此,一旦对象被初始化,函数就会在单例中调用,让您执行所需的操作。
更新:
方法#1
public class CreateListener {
public static void class1ObjectCreated () {
//Do some actions here
}
}
public class Class1 {
public Class1 () {
//Do something
CreateListener.class1ObjectCreated();
}
public Class1 (...args) {
//Do something
CreateListener.class1ObjectCreated();
}
}
方法#2:
AspectJ ruled out.
方法#3:
@PostConstruct depends on if application is Java-EE-6 compliant.