2

这里我想听一些特殊的类初始化;当这些类初始化时,我会做一些动作。

目前我想使用接口或注解,但是如何实现呢?

4

2 回答 2

1

我们已经解决了这个问题,我们使用了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新对象,不需要改变他们的行为。

于 2013-05-24T04:51:12.920 回答
0

您可以在此处使用观察者设计模式。让一个侦听器类(让它成为单例)公开一些方法,该方法将在构造函数中调用。因此,一旦对象被初始化,函数就会在单例中调用,让您执行所需的操作。

更新:

方法#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.
于 2013-05-15T03:56:38.553 回答