1

Dozer を理解するためだけに、PrimaryType と SecondaryType の 2 つのクラスを作成し、Dozer を使用してそれらをマッピングしようとしました。Dozer はそれらをシームレスにマッピングできました。

SecondaryType のコンストラクターを非公開にしようとしましたが、それでも Dozer はタイプ SecondaryType のオブジェクトを作成し、そのフィールドをマップすることができました。Dozer がプライベート コンストラクターを持つクラスをインスタンス化する方法を説明できる人はいますか?

PrimaryType.java

package in.yogi;

public class PrimaryType
{
    private String name;
    private int age;

    public PrimaryType(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "PrimaryType [name=" + name + ", age=" + age + "]";
    }

}

セカンダリ タイプ.java

package in.yogi;

public class SecondaryType
{
    private String name;
    private int age;
    private SecondaryType() {

    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "SecondaryType [name=" + name + ", age=" + age + "]";
    }
}

AppMain.java

package in.yogi;

import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;

import in.yogi.PrimaryType;

public class AppMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("This is the main Application!!!");
        PrimaryType sourceObject = new PrimaryType("Munsamy", 20);
        System.out.println(sourceObject);
        Mapper mapper = new DozerBeanMapper();
        SecondaryType destObject =  
            mapper.map(sourceObject, SecondaryType.class);
        System.out.println(destObject);
    }
}

出力:

PrimaryType [name=Munsamy, age=20]
log4j:WARN No appenders could be found for logger (org.dozer.config.GlobalSettings).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SecondaryType [name=Munsamy, age=20]
4

1 に答える 1

2

これは通常、リフレクションで行われます。Dozerのドキュメントでは、次のように説明されています。

Bean マッパーは Java で記述されており、Java Bean ユーティリティ メソッドの Jakarta Commons Bean Utils パッケージに大きく依存しています。

Commons Beanutilsプロジェクトのドキュメントを読むと、必要な説明が見つかります。

Java 言語は、ReflectionおよびIntrospection API を提供します ( JDK Javadocのjava.lang.reflectおよびパッケージを参照してください)。java.beansただし、これらの API は、理解して利用するのが非常に複雑になる可能性があります。BeanUtils コンポーネントは、これらの機能の使いやすいラッパーを提供します。

自分で簡単にできます:

public static void main(String[] args) throws Exception {
    Constructor<SecondaryType> constructor = SecondaryType.class.getDeclaredConstructor();
    constructor.setAccessible(true); // if not set accessible, you will get an exception
    SecondaryType instance = constructor.newInstance();
    System.out.println(instance);
}
于 2016-02-01T07:13:50.757 に答える