プロパティ・インジェクションと言えばイメージが近いか、Swingのコンポーネントの属性にプロパティ・ファイルの設定から値をインジェクションします。
public class Hello extends SingleFrameApplication { protected void startup(final String[] args) { JLabel label = new JLabel(); label.setName("label"); show(label); } public static final void main(final String[] args) { launch(Hello.class, args); } }
上述のコードを見ると、空のJLabelをどうやら作って表示しているようです。しかし、以下のプロパティ・ファイルを用意することでJLabelのプロパティを設定することができます。
# resources/Hello.properties label.text = Hello World label.font = Lucida-PLAIN-48 label.foreground = 0, 0, 0 label.background = 255, 255, 255 label.icon = earth.png
これを、フレームワーク無し(プロパティファイルは使用しない)で記述すると、以下のようなコードになります。
public class Hello extends JFrame { public Hello() { JLabel label = new JLabel(); label.setText("Hello World"); label.setForeground(new Color(0, 0, 0)); label.setBackground(new Color(255, 255, 255)); label.setFont(new Font("Lucida", Font.PAIN, 48)); label.setOpaque(true); URL imageUrl = getClass().getResource("resources/earth.png"); ImageIcon icon = new ImageIcon(imageUrl); label.setIcon(icon); add(label); } public static final void main(final String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new Hello(); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } }
記述量が多いのと、設定項目がハードコーディングになっており、変更するには再コンパイルが必要となります。
リソースファイルを使う場合、さらに長くなります。