<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Simples</title>
	<atom:link href="http://www.javasimples.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br</link>
	<description>Porque Java não precisa ser dificil...</description>
	<lastBuildDate>Thu, 02 Sep 2010 12:50:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Spring Framework Parte 3 -&gt; Java Database Connectivity (JDBC)</title>
		<link>http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/</link>
		<comments>http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 12:50:56 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[banco]]></category>
		<category><![CDATA[connectivity]]></category>
		<category><![CDATA[dados]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=213</guid>
		<description><![CDATA[Bem vindo leitor a mais um post da série Spring Framework.
Caso você ainda não leu os posts anteriores, por favor dê um pulinho bem rápido neles:

Spring Framework Parte 1 -> Dependency Injection
Spring Framework Parte 2 -> Aspect Oriented Programming

Vamos ao nosso próximo assunto então: JDBC e como o Spring facilita esse cara pra gente!

Tirando essa [...]]]></description>
			<content:encoded><![CDATA[<p>Bem vindo leitor a mais um post da série <strong>Spring Framework</strong>.</p>
<p>Caso você ainda não leu os posts anteriores, por favor dê um pulinho bem rápido neles:</p>
<ul>
<li><a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/" target="_blank">Spring Framework Parte 1 -> Dependency Injection</a></li>
<li><a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/" target="_blank">Spring Framework Parte 2 -> Aspect Oriented Programming</a></li>
</ul>
<p><br/>Vamos ao nosso próximo assunto então: JDBC e como o Spring facilita esse cara pra gente!</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_hitting_database.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_hitting_database.png" alt="" title="spring_framework_3_jdbc_hitting_database" width="402" height="197" class="aligncenter size-full wp-image-215" /></a></p>
<p>Tirando essa imagem do livro <strong>Spring in Action 2 (Manning, 2008)</strong> nós já conseguimos ver bem por cima como que o Spring pretende acessar de maneira padronizada a base de dados (Hitting the database) através de um objeto de acesso aos dados (DAO), um template (provido pelo próprio Spring) e caso nós quiséssemos, o Spring também oferece suporte padrão para alguns frameworks de persistência (será um dos próximos artigos desta série).</p>
<p>Tudo muito legal, muito bonito! Vamos tentar seguir este modelinho porque ele é bem bonitinho e vai nos ajudar um pouco. Apenas avisando que o jeito que descreverei neste tutorial não é o único jeito de acessar os dados através do seu driver JDBC, porém é um jeito que eu achei bem interessante e que vale a pena todos sabermos um pouquinho&#8230; =]<br />
<span id="more-213"></span></p>
<p>Existem apenas 2 conceitos básicos que o Spring nos sugere para o acesso rápido e fácil aos dados através de drivers JDBC: DataSource (DAO fornecido pelo Spring) e JdbcTemplate (template para acesso a dados através de um driver JDBC fornecido pelo Spring):</p>
<p><strong>DataSource</strong> é uma classe provida pelo nosso querido Spring Framework e que se preocupa com toda a conexão e conversação com o driver JDBC que iremos utilizar (neste exemplo iremos utilizar o driver JDBC para o banco de dados MySQL). Em palavras um pouco mais técnicas, esta classe irá se resonsabilizar por nos entregar um objeto <strong>java.sql.Connection</strong>, <strong>java.sql.Statement</strong>, entre esses objetos que utilizamos quando o assunto é conexão de dados JDBC.</p>
<p><strong>JdbcTemplate</strong> é uma outra classe muito útil provida pelo nosso <del datetime="2010-08-26T22:29:28+00:00">adorado</del> Spring! Este template provê métodos padronizados para acessarmos os dados (selecioná-los e manipulá-los), ou seja, fazer tudo o que podemos fazer com eles de um jeito bem fácil de acessar (como você irá descobrir logo a frente).</p>
<p>Muito bem, com esses dois conceitos já pintados na sua cabeça, por favor responda corretamente a próxima pergunta: &#8220;Já que estas classes são providas pelo nosso amigo Spring, quem instancia elas?&#8221;. Exato!! O próprio Spring cria os beans para estas classes, tudo o que temos que fazer é declarar estes beans no arquivo de configuração do Spring. Vamos a ele então:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;jdbc:mysql://localhost/spring_jdbc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;root&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;123&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.core.JdbcTemplate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Tão simples quanto encher um copo com água! Eu sinto até orgulho de mostrar como é fácil conectar com uma fonte de dados JDBC através do Spring! </p>
<p>O nosso primeiro bean é o <strong>dataSource</strong>. Como eu já disse ali em cima, esse é o cara responsável por conversar com o driver JDBC. Então nada mais justo que a gente ensinar ele a se comunicar com o driver passando os parâmetros corretos não é&#8230; Os parâmetros (injetados através da DI) passados para o dataSource foram: dataClassName (qual driver JDBC será usado), url (caminho do JDBC para se conectar até o banco de dados desejado), username (login do banco de dados) e password (senha do banco de dados).</p>
<p>No caso desse nosso exemplo, o driver JDBC é do MySQL, nunca esqueça que o driver deve estar no classpath em!!! Segue uma foto te ensinando como adicionar o driver JDBC do MySQL no NetBeans:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_driver_mysql.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/spring_framework_3_jdbc_driver_mysql.png" alt="" title="spring_framework_3_jdbc_driver_mysql" width="364" height="408" class="aligncenter size-full wp-image-224" /></a></p>
<p>E o segundo bean do arquivo de configuração é o <strong>jdbcTemplate</strong> que é o template provido pelo Spring para facilitar a manipulação dos dados. A unica dependência que este bean tem é o próprio dataSource, ou seja, ele precisa de uma referência para um dataSource para saber em qual banco ele vai executar os comandos que quisermos. Sendo assim, de um jeito muito fácil (injeção de dependência), nós passamos uma referência do nosso <strong>dataSource</strong> já criado para ele. ^^</p>
<p>Só fazendo uma pequena pausa no Spring agora, vamos falar um pouquinho do banco de dados: criei uma tabela de Pessoas para fazermos nossos teste aqui. Dê uma olhada no script de criação:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span>  <span style="color: #ff0000;">`Pessoas`</span> <span style="color: #66cc66;">&#40;</span>
    <span style="color: #ff0000;">`pes_cod`</span> INT <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">`pes_nome`</span> VARCHAR<span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">100</span> <span style="color: #66cc66;">&#41;</span> CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE utf8_unicode_ci <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #ff0000;">`pes_idade`</span> INT <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #66cc66;">,</span>
    <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>  <span style="color: #ff0000;">`pes_cod`</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span> ENGINE <span style="color: #66cc66;">=</span> INNODB CHARACTER <span style="color: #993333; font-weight: bold;">SET</span> utf8 COLLATE utf8_unicode_ci;</pre></div></div>

<p>Muuuito bem! A esta altura nós já temos os arquivos base para a conexão com o banco de dados E o banco de dados! Vamos continuar a codificar mais algumas classes e veremos o quão fácil o Spring tornou o acesso aos dados através do JDBC para nós. </p>
<p>Já que temos a tabela pronta no banco de dados, precisamos desenvolver uma classe Java que irá representar cada registro dessa tabela (para manipulação em memória né&#8230;):</p>
<p>Pessoa.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Pessoa <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nome<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Não Encontrado&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span> <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setCod<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getIdade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> idade<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setIdade<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span> <span style="color: #339933;">=</span> idade<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nome<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Codigo: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span><span style="color: #009900;">&#41;</span>
                <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; | Nome: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span>
                <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; | Idade: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">idade</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, com a classe Pessoa agora fica bem mais fácil nós termos uma &#8220;Pessoa&#8221; em memória! Vamos daqui pra frente tentar unir a classe Pessoa que acabamos de escrever com o banco de dados, ou seja, inserir um objeto da classe Pessoa no banco de dados, recuperar um objeto Pessoa do banco, e por ai vai&#8230; <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Caso você acompanha este blog regularmente, já deve ter percebido que eu virei fã de utilizar as interfaces no desenvolvimento (os motivos são muitos! então apenas acredite: compensa!). Já que eu sou um cara que gosta de seguir padrões e tudo mais, vamos codificar uma interface que será muito útil para o nosso acesso ao banco de dados:</p>
<p>IBanco.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> IBanco <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> InserirPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AtualizarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ApagarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa SelecionarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esta interface obriga a classe que implementá-la a dar suporte para as operações CRUD referêntes aos objetos Pessoa juntamente com a tabela do banco de dados Pessoa (ficou meio confusa essa frase? hehehe).</p>
<p>Como o código sempre resolve tudo, vamos a ele que você irá entender do que eu estou falando:</p>
<p>BancoDados.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BancoDados <span style="color: #000000; font-weight: bold;">implements</span> IBanco <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> JdbcTemplate jdbcTemplate<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> BancoDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setJdbcTemplate<span style="color: #009900;">&#40;</span>JdbcTemplate jdbcTemplate<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">jdbcTemplate</span> <span style="color: #339933;">=</span> jdbcTemplate<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> InserirPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;INSERT INTO Pessoas(pes_cod,pes_nome,pes_idade) VALUES(?,?,?)&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getIdade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> AtualizarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;UPDATE Pessoas SET pes_nome = ?, pes_idade= ? WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getIdade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ApagarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;DELETE FROM Pessoas WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
        jdbcTemplate.<span style="color: #006633;">update</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Pessoa SelecionarPessoa<span style="color: #009900;">&#40;</span>Pessoa pessoa<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> sql <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT * FROM Pessoas WHERE pes_cod = ?&quot;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003399;">List</span> resultados <span style="color: #339933;">=</span> jdbcTemplate.<span style="color: #006633;">query</span><span style="color: #009900;">&#40;</span>sql, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Object</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#125;</span>,
                <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RowMapper</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
                    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> mapRow<span style="color: #009900;">&#40;</span><span style="color: #003399;">ResultSet</span> rs, <span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399;">SQLException</span> <span style="color: #009900;">&#123;</span>
                        Pessoa p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_cod&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        p.<span style="color: #006633;">setIdade</span><span style="color: #009900;">&#40;</span>rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;pes_idade&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #000000; font-weight: bold;">return</span> p<span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Pessoa pes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>resultados.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            pes <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Pessoa<span style="color: #009900;">&#41;</span> resultados.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            pes.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>pessoa.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> pes<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Muito bem, vamos com calma&#8230; </p>
<p>A primeira coisa que devemos notar é que temos uma variável de instância chamada <strong>jdbcTemplate</strong>. Como eu imagino que você leitor é um cara que associa tudo muito rápido e já viu que um pouco mais pra baixo dessa variável tem o setter dela, eu imagino que você já entendeu que essa variável vai ser injetada através do container do Spring né&#8230; =]</p>
<p>Como nós já pedimos pro Spring criar um bean do tipo JdbcTemplate no arquivo de configuração, daqui a pouco nós voltaremos nele e pediremos pra ele enviar uma referência do JdbcTemplate aqui pra essa nossa classe poder usar. Tudo muito prático! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Depois disso o que nós podemos entender é que a classe reescreveu os métodos que a interface obriga e os implementou de fato! Vamos entender eles rapidinho&#8230;</p>
<p>Para as operações de inserção, alteração e exclusão os métodos são absolutamente iguais: primeiro foi definido o SQL referente a operação e depois foi chamado o método <strong>update</strong> da nossa classe super amigável: jdbcTemplate. </p>
<p>Existem dois detalhes para chamar a atenção na execução destas operações:</p>
<p>1 &#8211; O SQL que foi montado não possui os valores finais. Ao invés deles estão presentes pontos de interrogação ( ? ) representando parâmetros.</p>
<p>2 &#8211; Os parâmetros informados no SQL são enviados como o segundo parâmetro do método update do jdbcTemplate. Para a padronização na chamada do método é necessário que todos os parâmetros definidos no SQL sejam passados dentro de um vetor de Object (mesmo que seja só um parâmetro, ele também deve estar dentro do vetor). Outra coisa que vale ser lembrada é que o primeiro item do vetor irá ser incluído no lugar do primeiro parâmetro do SQL (primeiro ponto de interrogação) então tome cuidado para passar os parâmetros na ordem correta para o vetor de Object.</p>
<p>Só mais um comentário para a operação de seleção: também foi utilizado um SQL com parâmetro e um vetor de Object referenciando os parâmetros porém o método do <strong>jdbcTemplate</strong> utilizado não foi o <strong>update</strong>, e sim o <strong>query</strong>!</p>
<p>O funcionamento deste método é bem interessante: ao invés de apenas 2 parâmetros (como no método <strong>update</strong>), depois do vetor de Object é passado um objeto <strong>org.springframework.jdbc.core.RowMapper</strong> que é responsável por mapear cada registro retornado por um ResultSet interno ao <strong>jdbcTemplate</strong> em um objeto correspondente ao registro e após o mapeamento o objeto customizado é adicionado a um <strong>java.util.List</strong> que é o retorno final do método <strong>query</strong>.</p>
<p>Exemplo do nosso caso: caso sejam retornadas 3 pessoas pelo SQL utilizado, o método <strong>mapRow</strong> do objeto <strong>RowMapper</strong> será invocado 3 vezes (uma para cada registro). Cada vez que ele for invocado será configurado um novo objeto Pessoa com os dados de cada registro retornado do banco de dados e cada vez que o método retornar um novo objeto Pessoa ele será guardado na lista que será retornada pelo método <strong>query</strong>.</p>
<p>Logo depois deste método eu apenas retorno o primeiro objeto que está na lista ou então retorno um objeto com o mesmo código da busca caso não foi encontrado nenhum registro.</p>
<p>Sempre muito simples esses códigos&#8230; adoro isso&#8230; ehheheh</p>
<p>Vamos adicionar um bean ao arquivo de configuração do Spring para o container também instanciar a nossa classe responsável pelo banco de dados e é claro, vamos também já injetar o JdbcTemplate no nosso novo bean:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;driverClassName&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;com.mysql.jdbc.Driver&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;url&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;jdbc:mysql://localhost/spring_jdbc&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;username&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;root&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;password&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;123&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;org.springframework.jdbc.core.JdbcTemplate&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;dataSource&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;banco_dados&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;spring_jdbc.BancoDados&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
        <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;jdbcTemplate&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>E isso é tudo!!<br />
Nossas classes base para o acesso e manipulação da entidade Pessoa no banco de dados e no nosso próprio software já estão codificadas e bem funcionais. Tudo que precisamos agora é de um programinha exemplo para testarmos estas classes e ver como iriam ser realmente usadas.</p>
<p>Segue a classe que contém o método <em>main</em> desta aplicação:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ApplicationContext ctx <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassPathXmlApplicationContext<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/conf/spring_jdbc.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        BancoDados banco <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>BancoDados<span style="color: #009900;">&#41;</span> ctx.<span style="color: #006633;">getBean</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;banco_dados&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria os objetos Pessoa</span>
        Pessoa p1 <span style="color: #339933;">=</span> criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">&quot;Felipe&quot;</span>, <span style="color: #cc66cc;">18</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Pessoa p2 <span style="color: #339933;">=</span> criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #0000ff;">&quot;Felipe Saab&quot;</span>, <span style="color: #cc66cc;">21</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Pessoa felipe <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//insere no banco</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">InserirPessoa</span><span style="color: #009900;">&#40;</span>p1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;1 - Pessoa Inserida&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível inserir o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;2 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//altera</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">AtualizarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;3 - Pessoa Atualizada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível atualizar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera novamente</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;4 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//apaga</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            banco.<span style="color: #006633;">ApagarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;5 - Pessoa Apagada&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível apagar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//procura pela ultima vez</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            felipe <span style="color: #339933;">=</span> banco.<span style="color: #006633;">SelecionarPessoa</span><span style="color: #009900;">&#40;</span>p2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;6 - Pessoa recuperada: &quot;</span> <span style="color: #339933;">+</span> felipe<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Não foi possível recuperar o registro: &quot;</span> <span style="color: #339933;">+</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Pessoa criar_pessoa<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod, <span style="color: #003399;">String</span> nome, <span style="color: #000066; font-weight: bold;">int</span> idade<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Pessoa p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setCod</span><span style="color: #009900;">&#40;</span>cod<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>nome<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        p.<span style="color: #006633;">setIdade</span><span style="color: #009900;">&#40;</span>idade<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> p<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Concordo que o exemplo é meio grandinho mas é bem fácil de entender não é?<br />
Primeiro foram criados 3 objetos Pessoa (<strong>p1</strong> &#8211; &#8220;Felipe&#8221;, <strong>p2</strong> &#8211; &#8220;Felipe Saab&#8221; e <strong>felipe</strong> que irá receber o resultado da busca no banco), depois foi inserido um dos objetos, procurado por ele no banco, depois ele foi alterado com as informações do outro objeto e foi recuperado novamente, e por fim a Pessoa foi apagada do banco e só para garantir foi feita uma última busca.</p>
<p>Este exemplo foi só para testar todas as operações que nós implementamos. Caso você use algo parecido no seu software do dia a dia irá ver que tudo funciona perfeitamente bem (cada operação no teu lugar certo).</p>
<p>É isso ai leitor! Você chegou ao fim deste post grandão!! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
Espero que tenha gostado da leitura e da função que foi descrita aqui.</p>
<p>Caso queira fazer o download do projeto que eu desenvolvi como exemplo pode fazer o download <a href="http://dl.dropbox.com/u/4918828/Spring_JDBC.rar">aqui</a> (OBS: o projeto está com bibliotecas do NetBeans 6.8 (Spring 2.5 e MySQL JDBC) então ele só vai rodar 100% certo caso você abra ele no NetBeans 6.8 ou superior, caso contrario, apenas aproveite os códigos fonte =] ).</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29+-+http://tinyurl.com/2f2towe&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;du=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;cn=Bem%20vindo%20leitor%20a%20mais%20um%20post%20da%20s%C3%A9rie%20Spring%20Framework.%0D%0A%0D%0ACaso%20voc%C3%AA%20ainda%20n%C3%A3o%20leu%20os%20posts%20anteriores%2C%20por%20favor%20d%C3%AA%20um%20pulinho%20bem%20r%C3%A1pido%20neles%3A%0D%0A%0D%0A%0D%0A%09Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%0D%0A%09Spring%20Framework%20Parte%202%20-%3E%20Aspect%20Oriented%20Programming%0D%0A%0D%0AVamos%20ao%20nosso%20pr%C3%B3ximo%20assunt" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;t=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;title=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;summary=Bem%20vindo%20leitor%20a%20mais%20um%20post%20da%20s%C3%A9rie%20Spring%20Framework.%0D%0A%0D%0ACaso%20voc%C3%AA%20ainda%20n%C3%A3o%20leu%20os%20posts%20anteriores%2C%20por%20favor%20d%C3%AA%20um%20pulinho%20bem%20r%C3%A1pido%20neles%3A%0D%0A%0D%0A%0D%0A%09Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%0D%0A%09Spring%20Framework%20Parte%202%20-%3E%20Aspect%20Oriented%20Programming%0D%0A%0D%0AVamos%20ao%20nosso%20pr%C3%B3ximo%20assunt&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;title=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;title=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Bem%20vindo%20leitor%20a%20mais%20um%20post%20da%20s%C3%A9rie%20Spring%20Framework.%0D%0A%0D%0ACaso%20voc%C3%AA%20ainda%20n%C3%A3o%20leu%20os%20posts%20anteriores%2C%20por%20favor%20d%C3%AA%20um%20pulinho%20bem%20r%C3%A1pido%20neles%3A%0D%0A%0D%0A%0D%0A%09Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%0D%0A%09Spring%20Framework%20Parte%202%20-%3E%20Aspect%20Oriented%20Programming%0D%0A%0D%0AVamos%20ao%20nosso%20pr%C3%B3ximo%20assunt" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;title=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Bem%20vindo%20leitor%20a%20mais%20um%20post%20da%20s%C3%A9rie%20Spring%20Framework.%0D%0A%0D%0ACaso%20voc%C3%AA%20ainda%20n%C3%A3o%20leu%20os%20posts%20anteriores%2C%20por%20favor%20d%C3%AA%20um%20pulinho%20bem%20r%C3%A1pido%20neles%3A%0D%0A%0D%0A%0D%0A%09Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%0D%0A%09Spring%20Framework%20Parte%202%20-%3E%20Aspect%20Oriented%20Programming%0D%0A%0D%0AVamos%20ao%20nosso%20pr%C3%B3ximo%20assunt" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fspring-framework-parte-3-java-database-connectivity-jdbc%2F&amp;t=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Bem%20vindo%20leitor%20a%20mais%20um%20post%20da%20s%C3%A9rie%20Spring%20Framework.%0D%0A%0D%0ACaso%20voc%C3%AA%20ainda%20n%C3%A3o%20leu%20os%20posts%20anteriores%2C%20por%20favor%20d%C3%AA%20um%20pulinho%20bem%20r%C3%A1pido%20neles%3A%0D%0A%0D%0A%0D%0A%09Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%0D%0A%09Spring%20Framework%20Parte%202%20-%3E%20Aspect%20Oriented%20Programming%0D%0A%0D%0AVamos%20ao%20nosso%20pr%C3%B3ximo%20assunt" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/&amp;n=Spring+Framework+Parte+3+-%3E+Java+Database+Connectivity+%28JDBC%29&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=213&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/spring-framework-parte-3-java-database-connectivity-jdbc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spring Framework Parte 2 -&gt; Aspect Oriented Programming</title>
		<link>http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/</link>
		<comments>http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 19:53:43 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[aop]]></category>
		<category><![CDATA[aspect]]></category>
		<category><![CDATA[aspectj]]></category>
		<category><![CDATA[aspectos]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[joinpoint]]></category>
		<category><![CDATA[orientada]]></category>
		<category><![CDATA[oriented]]></category>
		<category><![CDATA[poa]]></category>
		<category><![CDATA[pointcut]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=193</guid>
		<description><![CDATA[Considerações iniciais: se vc veio ler este post e ainda não leu o post anterior (Spring Framework Parte 1 -> Dependency Injection), por favor o faça! Caso contrário você pode não entender os códigos utilizados aqui.
Beleza, daqui pra frente vou assumir que você já sabe como linkar os beans no Spring utilizando o arquivo de [...]]]></description>
			<content:encoded><![CDATA[<p>Considerações iniciais: se vc veio ler este post e ainda <strong>não</strong> leu o post anterior (<a target="_blank" href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/">Spring Framework Parte 1 -> Dependency Injection</a>), por favor o faça! Caso contrário você pode não entender os códigos utilizados aqui.</p>
<p>Beleza, daqui pra frente vou assumir que você já sabe como linkar os beans no Spring utilizando o arquivo de configuração (pelo menos o básico, como visto na <a target="_blank" href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/">Parte 1</a> desta série).</p>
<p>Vamos ao nosso post então: <strong>AOP: Aspect Oriented Programming (POA: Programação Orientada a Aspectos)</strong>. E como sempre, pra fugir um pouco dos termos técnicos, vamos a uma história:</p>
<p>Imagine que você está desenvolvendo um e-commerce, atualmente está desenvolvendo o checkout do teu sistema, ou seja, o cliente já escolheu tudo o que ele queria, e agora vai fazer a transferência eletrônica do pagamento (vamos imaginar que você está desenvolvendo tudo isso). Olhando com um nível de abstração muito alto o seu código poderia ser algo assim:<br />
<span id="more-193"></span></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CheckoutService <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> efetuarPagamento<span style="color: #009900;">&#40;</span>Carrinho carrinho<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        LOGGER.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - Executando efetuarPagamento(Carrinho carrinho)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>carrinho.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">temPermissao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
             DAO.<span style="color: #006633;">iniciarTransacao</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                 carrinho.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">debitar</span><span style="color: #009900;">&#40;</span>carrinho.<span style="color: #006633;">getValorTotal</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 carrinho.<span style="color: #006633;">finalizarCompra</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 DAO.<span style="color: #006633;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 LOGGER.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - Pagamento efetuado!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                 DAO.<span style="color: #006633;">rollback</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 LOGGER.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - &quot;</span> <span style="color: #339933;">+</span> e.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                 
             <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            LOGGER.<span style="color: #006633;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Date</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;Cliente não está autenticado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dê uma boa olhada no código&#8230; O que tem a ver mesmo com o checkout são apenas as linhas:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">carrinho.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">debitar</span><span style="color: #009900;">&#40;</span>carrinho.<span style="color: #006633;">getValorTotal</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
carrinho.<span style="color: #006633;">finalizarCompra</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O resto é código responsável por logging, controle de transação, permissão de acessos, coisas que são necessárias porém que ocupam muito espaço, &#8220;sujam&#8221; o código. A idéia da orientação a objetos é encapsular em um objeto todas as coisas referentes a ele, os serviços que ele vai prestar, e não ficar poluindo ele com outros códigos que não tem nada a ver com o seu propósito. </p>
<p>Mas esses códigos são necessários para a aplicação funcionar corretamente! O que fazer então? <strong>Orientação a Aspectos!!!</strong> </p>
<p>A Orientação a Aspectos surgiu exatamente para eliminar os <em>cross-cutting concerns</em> (código que é necessário, porém foge das preocupações principais do objeto, como no caso acima, o checkout tem que se preocupar com o logging, transação e permissão).</p>
<p>OBS: Existem vários termos técnicos, sem graça, e difíceis de entender envolvidos nesse &#8220;paradigma&#8221; de programação. Nós vamos discutindo-os conforme o tutorial for andando.</p>
<p>Então como eu faço para separar esse código chato dos meus objetos? A Orientação a Aspectos funciona assim:</p>
<p><strong>-></strong> Primeiro a gente separa o código que não tem nada a ver com o nosso objeto (logging, transação, permissão e tals) em um lugar separado. Esse lugar separado se chama <em><strong>advice</strong></em> (é o <em>o que</em>).</p>
<p><strong>-></strong> Ainda dentro do advice, é definido onde o programa tem que dar uma &#8220;paradinha&#8221; para que o código que foi separado possa ser executado. Todo lugar que o programa pode dar essa &#8220;paradinha&#8221; é chamado de <em><strong>join point</strong></em>. Um <em>join point</em> pode ser por exemplo: uma chamada de método, a execução de um método, instanciação de objetos, execução de construtores, e mais alugns (é o <em>quando</em>).</p>
<p><strong>-></strong> Uma vez que nós já sabemos <em>o que</em> vai ser feito (advice) e <em>quando</em> vai ser feito (join point), falta definir <em>onde</em> vai ser feito. Para isso servem os <em>pointcuts</em>. Geralmente são definidos utilizando os nomes das classes e métodos que queremos interceptar, mas também podem ser definidos através de expressões regulares (logo mais veremos um exemplo na prática).</p>
<p><strong>-></strong> Por fim, o conjunto de tudo isso (o que vai ser feito, quando vai ser feito e onde vai ser feito) é chamado de <em><strong>aspect (aspecto)</strong></em>.</p>
<p>Em <del datetime="2010-08-11T17:28:59+00:00">muito</del> poucas palavras isso é a base da orientação a aspectos. Vamos ver como a gente pode utilizar isso no Spring.</p>
<p>O Spring oferece diversos tipos de suporte a Orientação a Aspectos (eles foram evoluindo através das versões), dentre eles o suporte para a orientação a aspectos declarativa (no XML de configuração) e anotativa (utilizando annotations (se não sabe o que são annotations <a target="_blank" href="http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/">clique aqui</a>)).</p>
<p>Eu estudei as duas e devo dizer que me identifiquei muito mais com a orientação a aspectos utilizando annotations, portanto é ela que eu irei mostrar aqui (caso queira aprender sobre o outro tipo eu aconselho fortemente o livro Spring in Action 2 (Manning, 2008), capítulo 4).</p>
<p>OBS: Eu irei reaproveitar o código da <a target="_blank" href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/">Parte 1</a>, então caso você não tenha feito o tutorial anterior eu aconselho a pelo menos pegar os código de lá. Tudo o que eu fiz foi renomear o projeto para &#8220;OrientacaoAspectos&#8221;, o pacote principal para &#8220;orientacaoaspectos&#8221; e todas as definições dos beans no arquivo de configuração para bater com o novo nome do pacote.<br />
Como o suporte de orientação a aspectos do Spring consegue usar a poderosa linguagem do AspectJ (para definir pointcuts) nós vamos usá-la aqui, para tanto é necessário o download da biblioteca do AspectJ e a inclusão dela no classpath. O arquivo pode ser baixado <a target="_blank"  href="http://www.eclipse.org/aspectj/downloads.php">no site do projeto</a>.<br />
Só mais um detalhe: o arquivo que vc baixa do site eh um .jar chamado: aspectj-x.x.x.jar, dentro dele é que estão as bibliotecas que o Spring precisa, então abra este arquivo com o WinRAR (ou outro do gênero) navegue até a pasta /lib, extraia os .jar que estão lá e os adicione ao classpath.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/orientacao_aspectos_aspectj.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/orientacao_aspectos_aspectj.png" alt="" title="orientacao_aspectos_aspectj" width="650" height="352" class="aligncenter size-full wp-image-204" /></a></p>
<p>Voltando ao escopo da nossa aplicação: o show de talentos Ídolos Spring, vamos adicionar um requisito muito importante para qualquer programa de entrenimento: a platéia!</p>
<p>Sem utilizar a orientação a aspectos nós teríamos os seguintes códigos:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Plateia <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Plateia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A platéia está sentando&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> desligarCelulares<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A platéia está desligando os celulares&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> aplaudir<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;CLAP CLAP CLAP UHULL CLAP CLAP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> vaiar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UUUUUU!! E FORA! E FORA! UUUUU!! &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Cantor <span style="color: #000000; font-weight: bold;">implements</span> Competidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Musica musica<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Plateia plateia<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Cantor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setMusica<span style="color: #009900;">&#40;</span>Musica musica<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">musica</span> <span style="color: #339933;">=</span> musica<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setPlateia<span style="color: #009900;">&#40;</span>Plateia plateia<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">plateia</span> <span style="color: #339933;">=</span> plateia<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        plateia.<span style="color: #006633;">sentar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        plateia.<span style="color: #006633;">desligarCelulares</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            musica.<span style="color: #006633;">cantar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            plateia.<span style="color: #006633;">aplaudir</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            plateia.<span style="color: #006633;">vaiar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>OBS: A platéia estaria sendo injetada na classe Cantor pelo container assim como está acontecendo com a musica.</p>
<p>Sem a orientação a aspectos, toda classe que implemente a interface Competidor tem que ficar se preocupando com a platéia. Não é certo o competidor ficar mostrando os assentos para a platéia, pedir para elas desligarem os celulares, se apresentar e por fim pedir para eles aplaudirem ou vaiarem. Isso é coisa que a platéia tem que fazer sozinha!</p>
<p>Vamos utilizar todo o poder da orientação a aspectos para que a platéia consiga fazer isso sozinha. A classe Cantor volta a ser o que era antes, se preocupando somente em cantar a sua musica:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Cantor <span style="color: #000000; font-weight: bold;">implements</span> Competidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Musica musica<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Cantor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setMusica<span style="color: #009900;">&#40;</span>Musica musica<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">musica</span> <span style="color: #339933;">=</span> musica<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        musica.<span style="color: #006633;">cantar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>E a classe Plateia vai ser &#8220;anotada&#8221; para utilizar as funcionalidades da orientação a aspectos:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Aspect
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Plateia <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Plateia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    @Pointcut<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;execution(* *.apresentar(..))&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentacao<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    @Before<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;apresentacao()&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> sentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A platéia está sentando&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Before<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;apresentacao()&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> desligarCelulares<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;A platéia está desligando os celulares&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @AfterReturning<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;apresentacao()&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> aplaudir<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;CLAP CLAP CLAP UHULL CLAP CLAP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @AfterThrowing<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;apresentacao()&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> vaiar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UUUUUU!! E FORA! E FORA! UUUUU!! &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Aconteceram algumas coisas aqui:</p>
<p>-> Primeiro de tudo, a classe foi anotada com a anotação <em>@Aspect</em> indicando o óbvio: esta classe será um aspecto;</p>
<p>-> Depois foi criado um método que não faz absolutamente nada chamado <strong>apresentacao()</strong> cujo único propósito deste método é ser anotado para se &#8220;tornar&#8221; um pointcut (&#8220;tornar&#8221; entre aspas porque apresentar() continua sendo um método que não faz nada, apenas contém uma anotação que é um pointcut).<br />
    O parâmetro passado para a anotação <em>@Pointcut</em> é uma frase na linguagem de descrição de pointcuts do AspectJ. Segue uma pequena explicação dela (que eu acabei de fazer no Paint!! hehehe):</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/orientacao_aspectos_aspectj_sintaxe_pointcut.png"><img src="http://www.javasimples.com.br/wp-content/uploads/2010/08/orientacao_aspectos_aspectj_sintaxe_pointcut.png" alt="" title="orientacao_aspectos_aspectj_sintaxe_pointcut" width="650" height="352" class="aligncenter size-full wp-image-206" /></a></p>
<p>-> Depois que o pointcut está definido, basta anotar os métodos desejados especificando quando e onde eles devem ser executados. Para especificar onde os métodos serão executados é utilizado o nome do método que está anotado com o pointcut (no nosso exemplo é a string &#8220;apresentacao()&#8221;) e para especificar quando existem algumas outras anotações. Creio que as mais utilizadas são: <em>@Before</em>, <em>@AfterReturning</em> e <em>@AfterThrowing</em> (caso queira saber quais são as outras, fique a vontade para fuçar na <a target="_blank" href="http://www.eclipse.org/aspectj/doc/next/aspectj5rt-api/org/aspectj/lang/annotation/package-tree.html">documentação</a>).</p>
<p>E voilá, nosso aspecto está pronto! Para ele funcionar só falta mais uma coisinha, que não é tão pequena assim (pelo menos na teoria, na prática é sim! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).</p>
<p>Para a orientação a aspectos funcionar devem ser criadas cópias dos objetos que queremos interceptar. Tais cópias contém os advices (códigos das cross-cut concerns) e esse objeto é que recebe as requisições, executa os advices e depois passa a requisição para o método do objeto original. Essas cópias de objetos que contém os advices são chamados de Proxy (no plural: Proxies). </p>
<p>E até algumas versões atrás os proxies tinham que ser criados na mão!!! Imagine que trabalho que dava&#8230; Porém o Spring provê um mecanismo automático para a criação dos proxies (ufa!).</p>
<p>Segue o arquivo de configuração para podermos fazer nosso exemplo funcionar:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span> </span>
<span style="color: #009900;">        <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">xmlns:aop</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/aop&quot;</span></span>
<span style="color: #009900;">        <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans</span>
<span style="color: #009900;">            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</span>
<span style="color: #009900;">            http://www.springframework.org/schema/aop</span>
<span style="color: #009900;">            http://www.springframework.org/schema/aop/spring-aop-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
       <span style="color: #808080; font-style: italic;">&lt;!-- competidores --&gt;</span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.AtireiOPauNoGato&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jose&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.Cantor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ciranda&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.CirandaCirandinha&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;gaita&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.Gaita&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;piano&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.Piano&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;carlos&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.CantorTocador&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;instrumento&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;piano&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
       <span style="color: #808080; font-style: italic;">&lt;!-- platéia --&gt;</span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;orientacaoaspectos.Plateia&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;aop:aspectj-autoproxy</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Três coisas novas apareceram no arquivo de configuração:</p>
<p>1 &#8211; Na root tag (<beans>) foi definido mais um namespace (xmlns:aop) e na localização dos esquemas estão os seus respectivos links. Isso é necessário para o arquivo de configuração saber quais tags podem e quais não podem quando o assunto é AOP;</p>
<p>2 &#8211; Foi declarado o bean correspondente à platéia. Ele não tem o atributo id definido porque provavelmente nós nunca precisaremos de uma referência à platéia, eles fazem tudo sozinhos! Não tem porque darmos um id para a platéia sendo que nunca iremos utilizá-la;</p>
<p>3 &#8211; A simples tag &#8220;< aop:aspectj-autoproxy />&#8221; já diz para o Spring fazer todo o trabalho duro de ficar criando os proxies para nós.</p>
<p>E é isso caro leitor(a) (será que mulher le isso? to brincando!! hehehe), agora é só compilar (in the java-way of course), pedir pra tia VM executar e ver a platéia trabalhando sozinha, que povo educado! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Saindo da historinha e voltando ao mundo real, é extremamente fácil prover um mecanismo de log simples e que pode sofrer modificações facilmente utilizando a programação orientada a aspectos. Suponha que sua aplicação utilize o mecanismo padrão de log do Java e queira mudar para o Log4J: simples! Basta ir no seu aspecto responsável pelo log, e alterar os códigos. Você só tem trabalho uma vez (e nem é tanto trabalho assim)!</p>
<p>Nos próximos posts veremos os mecanismos que o Spring provê para banco de dados, transações, segurança, e mais alguns. Tão fácil quanto um System.out.println(&#8220;Hello World&#8221;).</p>
<p>Quem quiser o código do projeto, está <a href="http://dl.dropbox.com/u/4918828/OrientacaoAspectos.rar">aqui</a>.</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming+-+http://tinyurl.com/2bmelh3&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;du=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;cn=Considera%C3%A7%C3%B5es%20iniciais%3A%20se%20vc%20veio%20ler%20este%20post%20e%20ainda%20n%C3%A3o%20leu%20o%20post%20anterior%20%28Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%29%2C%20por%20favor%20o%20fa%C3%A7a%21%20Caso%20contr%C3%A1rio%20voc%C3%AA%20pode%20n%C3%A3o%20entender%20os%20c%C3%B3digos%20utilizados%20aqui.%0D%0A%0D%0ABeleza%2C%20daqui%20pra%20frente%20vou%20assumir%20que%20voc%C3%AA%20j%C3%A1%20sabe%20como%20linkar%20os%20b" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;t=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;title=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;summary=Considera%C3%A7%C3%B5es%20iniciais%3A%20se%20vc%20veio%20ler%20este%20post%20e%20ainda%20n%C3%A3o%20leu%20o%20post%20anterior%20%28Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%29%2C%20por%20favor%20o%20fa%C3%A7a%21%20Caso%20contr%C3%A1rio%20voc%C3%AA%20pode%20n%C3%A3o%20entender%20os%20c%C3%B3digos%20utilizados%20aqui.%0D%0A%0D%0ABeleza%2C%20daqui%20pra%20frente%20vou%20assumir%20que%20voc%C3%AA%20j%C3%A1%20sabe%20como%20linkar%20os%20b&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;title=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;title=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Considera%C3%A7%C3%B5es%20iniciais%3A%20se%20vc%20veio%20ler%20este%20post%20e%20ainda%20n%C3%A3o%20leu%20o%20post%20anterior%20%28Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%29%2C%20por%20favor%20o%20fa%C3%A7a%21%20Caso%20contr%C3%A1rio%20voc%C3%AA%20pode%20n%C3%A3o%20entender%20os%20c%C3%B3digos%20utilizados%20aqui.%0D%0A%0D%0ABeleza%2C%20daqui%20pra%20frente%20vou%20assumir%20que%20voc%C3%AA%20j%C3%A1%20sabe%20como%20linkar%20os%20b" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;title=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Considera%C3%A7%C3%B5es%20iniciais%3A%20se%20vc%20veio%20ler%20este%20post%20e%20ainda%20n%C3%A3o%20leu%20o%20post%20anterior%20%28Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%29%2C%20por%20favor%20o%20fa%C3%A7a%21%20Caso%20contr%C3%A1rio%20voc%C3%AA%20pode%20n%C3%A3o%20entender%20os%20c%C3%B3digos%20utilizados%20aqui.%0D%0A%0D%0ABeleza%2C%20daqui%20pra%20frente%20vou%20assumir%20que%20voc%C3%AA%20j%C3%A1%20sabe%20como%20linkar%20os%20b" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fspring-framework-parte-2-aspect-oriented-programming%2F&amp;t=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Considera%C3%A7%C3%B5es%20iniciais%3A%20se%20vc%20veio%20ler%20este%20post%20e%20ainda%20n%C3%A3o%20leu%20o%20post%20anterior%20%28Spring%20Framework%20Parte%201%20-%3E%20Dependency%20Injection%29%2C%20por%20favor%20o%20fa%C3%A7a%21%20Caso%20contr%C3%A1rio%20voc%C3%AA%20pode%20n%C3%A3o%20entender%20os%20c%C3%B3digos%20utilizados%20aqui.%0D%0A%0D%0ABeleza%2C%20daqui%20pra%20frente%20vou%20assumir%20que%20voc%C3%AA%20j%C3%A1%20sabe%20como%20linkar%20os%20b" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/&amp;n=Spring+Framework+Parte+2+-%3E+Aspect+Oriented+Programming&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=193&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/spring-framework-parte-2-aspect-oriented-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring Framework Parte 1 -&gt; Dependency Injection</title>
		<link>http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/</link>
		<comments>http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:11:13 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[dependencia]]></category>
		<category><![CDATA[dependency]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[framewrok]]></category>
		<category><![CDATA[injecao]]></category>
		<category><![CDATA[injection]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[padrao]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=185</guid>
		<description><![CDATA[Quem é dessa área e nunca ouviu falar de Spring Framework por favor levante a mão&#8230;&#8230;&#8230;&#8230;.. Ótimo, todo mundo pelo menos já ouviu falar desse tal de Spring.
Durante esta série de tutoriais eu vou demonstrar o que é, pra que server e como vc pode utilizar o Spring para facilitar seus projetos.
Primeiramente, o que é [...]]]></description>
			<content:encoded><![CDATA[<p>Quem é dessa área e nunca ouviu falar de Spring Framework por favor levante a mão&#8230;&#8230;&#8230;&#8230;.. Ótimo, todo mundo pelo menos já ouviu falar desse tal de Spring.</p>
<p>Durante esta série de tutoriais eu vou demonstrar o que é, pra que server e como vc pode utilizar o Spring para facilitar seus projetos.</p>
<p>Primeiramente, o que é esse tal de Spring afinal de contas? Spring é um framework que propicia um container para sua aplicação, ou seja, sua aplicação roda em cima do container do Spring. Tal container provê principalmente a<strong> Injeção de Dependência </strong>(ou Inversão de Controle, como era conhecido anteriormente) e a <strong>Programação Orientada a Aspectos</strong>.</p>
<p>Nesta primeira parte eu vou falar sobre o padrão Injeção de Dependência e os benefícios que ele provê. Vamos lá então:</p>
<p><span id="more-185"></span>O padrão de projeto Injeção de Dependência diz que uma classe não deve criar as suas dependências, em outras palavras, uma classe não deve instanciar seus atributos. Ao invés disso, eles devem ser injetados na classe através de um mecanismo externo, ou através de quem criou o objeto desta classe.</p>
<p>Ainda não está claro né&#8230; Vamos a um exemplo (baseado em um dos exemplos do livro Spring in Action 2, 2008) para facilitar as coisas.</p>
<p>Vamos imaginar que fomos contratados para desenvolver o software do <strong>Ídolos Spring?</strong>, uma competição de talentos musicais onde as pessoas cantam e/ou tocam. Primeiro de tudo vamos desenvolver uma interface genérica o suficiente para todos os nossos competidores:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Competidor
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, agora todo mundo que for competir no Ídolos Spring vai ter que implementar essa interface para poder participar (é quase como se fosse a inscrição da competição&#8230; hahahahah péssima analogia.. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ).</p>
<p>Vamos então aos competidores, vamos começar com um cantor. Um cantor não toca nenhum instrumento musical, ele apenas canta uma música. Vamos então à interface que descreve uma música:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Musica
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> cantar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Baseado na interface, já podemos criar uma música:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AtireiOPauNoGato <span style="color: #000000; font-weight: bold;">implements</span> Musica <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> letra <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;Atirei o páu no gato tô tô&quot;</span>,
        <span style="color: #0000ff;">&quot;Mas o gato tô tô&quot;</span>,
        <span style="color: #0000ff;">&quot;Não morreu reu reu&quot;</span>,
        <span style="color: #0000ff;">&quot;Dona Chica cá&quot;</span>,
        <span style="color: #0000ff;">&quot;Admirou-se se&quot;</span>,
        <span style="color: #0000ff;">&quot;Do berro, do berro que o gato deu&quot;</span>,
        <span style="color: #0000ff;">&quot;Miau !!!!!!&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> cantar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> letra.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>letra<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Legal, alguém vai cantar a famosa cantiga <em>Atirei o pau no gato. </em>Vamos codificar o cantor que irá fazer isso então:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Cantor <span style="color: #000000; font-weight: bold;">implements</span> Competidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Musica musica<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Cantor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">musica</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> AtireiOPauNoGato<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        musica.<span style="color: #006633;">cantar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Prontinho. Agora toda vez que um cantor for se apresentar ele irá cantar Atirei o Pau no Gato. Mas pera ai, tem alguma coisa que não faz muito sentido aqui não tem?</p>
<p>Será que TODO cantor da nossa competição vai cantar a mesma música? Acho que não né&#8230; E do jeito que esta classe está implementada, nós temos que mudar a classe para ele cantar uma outra musica. Isso não é lá muito viável&#8230;</p>
<p>O que a Injeção de Dependência prega é que ao invés de o cantor se preocupar em ficar preparando a música que ele vai cantar, ele apenas vai receber a música impressa um pouco antes da competição e pronto.</p>
<p>Pensando nisso, o cantor ficaria assim:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Cantor <span style="color: #000000; font-weight: bold;">implements</span> Competidor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Musica musica<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Cantor<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setMusica<span style="color: #009900;">&#40;</span>Musica musica<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">musica</span> <span style="color: #339933;">=</span> musica<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        musica.<span style="color: #006633;">cantar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, o cantor já não está mais preparando a sua música, pouco antes da apresentação ele vai receber a música (através do setter) e vai cantá-la (porque quem é bom faz ao vivo! hehehe).</p>
<p>Ok ok, até aqui não teve absolutamente NADA do tal do Spring, e vc provavelmente ainda não entendeu o porque desse monte de interfaces que parecem bobas não é mesmo?&#8230;</p>
<p>Vamos lá, advinhem quem vai dar a musica para o cantor? EXATO!! O container do Spring é quem vai ser responsável por entregar a música para o nosso cantor, ou em termos mais técnicos, o container é quem faz toda a linkagem dos beans (cada objeto manipulado pelo container é um bean, ex: uma musica, um cantor, um objeto que acessa o banco de dados, etc).</p>
<p>Para nós vermos como isso tudo funciona (pq ngm gosta de bla bla bla), vou abrir o NetBeans 6.8, criar uma nova Aplicação Java e criar as interfaces e classes descritas até aqui.</p>
<p>O NetBeans já traz as bibliotecas do Spring Framework junto com a IDE, o que te economiza um tempinho baixando-as. Clique com o botão direito na pasta Bibliotecas e cliquem &#8220;Adicionar bliblioteca&#8230;&#8221; e adicione a biblioteca &#8220;Spring Framework 2.5&#8243;</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/Sem-título.png"><img class="aligncenter size-full wp-image-186" title="inserindo spring framework" src="http://www.javasimples.com.br/wp-content/uploads/2010/08/Sem-título.png" alt="" width="712" height="402" /></a></p>
<p>Uma vez que o Spring já está no classpath nós já podemos criar um arquivo de configuração para descrever os beans da nossa aplicação. Toda a configuração do container é feita através de arquivos XML.</p>
<p>Sendo assim eu criei mais um pacote (conf) e criei o arquivo idolos.xml dentro dele, este será o arquivo que o Spring irá utilizar para o container da nossa aplicação.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/08/pacotes-spring-parte-1.png"><img class="aligncenter size-full wp-image-187" title="pacotes-spring-parte-1" src="http://www.javasimples.com.br/wp-content/uploads/2010/08/pacotes-spring-parte-1.png" alt="" width="219" height="235" /></a></p>
<p>A tag root dos arquivos de configuração do Spring é a tag &lt;beans&gt; que define os namespaces e os DTDs necessários. De começo deixe o arquivo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans</span>
<span style="color: #009900;">       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Essa é a estrutura básica de um arquivo de configuração (não se assuste com o tamanho dessa tag, vc não precisa decorar essas coisas). </p>
<p>Já que nossas classes estão prontas, vamos para o nosso primeiro competidor: José. O José vai cantar <em>Atirei o Pau no Gato</em>. Para declará-lo e dar a música pra ele vai ficar assim:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans</span>
<span style="color: #009900;">       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.AtireiOPauNoGato&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jose&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Cantor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Aqui é que o Spring começa a trabalhar, cada tag <bean> no arquivo de configuração representa um objeto que o container irá gerenciar. No nosso exemplo, temos o bean &#8220;atireiopau&#8221; que é um objeto da classe AtireiOPauNoGato e o bean &#8220;jose&#8221; que eh um Cantor e vai cantar a música referenciada pelo bean &#8220;atireiopau&#8221;.</p>
<p>Em termos de código, seria como se o container fizesse o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">injecaodependencia.<span style="color: #006633;">AtireiOPauNoGato</span> atireiopau <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> injecaodependencia.<span style="color: #006633;">AtireiOPauNoGato</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
injecaodependencia.<span style="color: #006633;">Cantor</span> jose <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> injecaodependencia.<span style="color: #006633;">Cantor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jose.<span style="color: #006633;">setMusica</span><span style="color: #009900;">&#40;</span>atireiopau<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Essa é a mágica da Injeção de Dependência, o José teve a música &#8220;injetada&#8221; nele, se a gente quiser que ele cante outra música não precisamos reescrever a classe Cantor, apenas injetar uma música diferente nele.</p>
<p>Isso torna a aplicação muito mais desacoplada, muito mais fácil de testar e de reusar os módulos!!!</p>
<p>Mas e para usar isso agora? Como que a gente põe isso pra funcionar? Eu quero ver o José cantar!!!! hehehe</p>
<p>Vamos lá então, vamos ao código da classe principal do nosso exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ApplicationContext ctx <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassPathXmlApplicationContext<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;conf/idolos.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Competidor competidor <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Competidor<span style="color: #009900;">&#41;</span> ctx.<span style="color: #006633;">getBean</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;jose&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        competidor.<span style="color: #006633;">apresentar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A interface <strong>ApplicationContext</strong> é justamente o container (um dos existentes) do Spring Framework. Existe também a <strong>BeanFactory</strong> mas essa é bem mais simples e eu não irei comentá-la.</p>
<p>O que acontece nesse código então é o seguinte: é criado o container passando o arquivo de configuração que ele irá utilizar, depois é recuperado o bean &#8220;jose&#8221; do container (nesse momento o container instancia o bean e todas as suas dependências) e por fim, nós pedimos pro José se apresentar.</p>
<p>Você deverá ver ele cantando incrivelmente bem o clássico <em>Atirei o Pau no Gato</em>.</p>
<p>Porém o próximo competidor promete! Ele irá cantar E tocar Ciranda Cirandinha com uma gaita!! Essa eu quero ver!! </p>
<p>Vamos às classes necessárias para o próximo competidor:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CirandaCirandinha <span style="color: #000000; font-weight: bold;">implements</span> Musica <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> letra <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&quot;Ciranda , cirandinha,&quot;</span>,
        <span style="color: #0000ff;">&quot;Vamos todos cirandar,&quot;</span>,
        <span style="color: #0000ff;">&quot;Vamos dar a meia volta,&quot;</span>,
        <span style="color: #0000ff;">&quot;Volta e meia vamos dar&quot;</span>,
        <span style="color: #0000ff;">&quot;&quot;</span>,
        <span style="color: #0000ff;">&quot;O anel que tu me destes,&quot;</span>,
        <span style="color: #0000ff;">&quot;Era vidro&quot;</span>,
        <span style="color: #0000ff;">&quot;E se quebrou.&quot;</span>,
        <span style="color: #0000ff;">&quot;O amor que tu me tinhas&quot;</span>,
        <span style="color: #0000ff;">&quot;Era pouco e se acabou.&quot;</span>,
        <span style="color: #0000ff;">&quot;&quot;</span>,
        <span style="color: #0000ff;">&quot;Ciranda , cirandinha,&quot;</span>,
        <span style="color: #0000ff;">&quot;Vamos todos cirandar,&quot;</span>,
        <span style="color: #0000ff;">&quot;Vamos dar a meia volta,&quot;</span>,
        <span style="color: #0000ff;">&quot;Volta e meia vamos dar&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> cantar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> letra.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>letra<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Instrumento <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> tocar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Gaita <span style="color: #000000; font-weight: bold;">implements</span> Instrumento <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> tocar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;FUU FUU FII FII&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CantorTocador <span style="color: #000000; font-weight: bold;">extends</span> Cantor <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Instrumento instrumento<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> CantorTocador<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setInstrumento<span style="color: #009900;">&#40;</span>Instrumento instrumento<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">instrumento</span> <span style="color: #339933;">=</span> instrumento<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> apresentar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        instrumento.<span style="color: #006633;">tocar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">apresentar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        instrumento.<span style="color: #006633;">tocar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto, agora nosso próximo competidor está pronto para se apresentar. Sras e Srs dêem as boas vindas para Carlos:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans</span>
<span style="color: #009900;">       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.AtireiOPauNoGato&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jose&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Cantor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ciranda&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.CirandaCirandinha&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;gaita&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Gaita&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;carlos&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.CantorTocador&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;ciranda&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;instrumento&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;gaita&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Agora basta chamar o Carlos para se apresentar ao invés do José:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Main <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ApplicationContext ctx <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ClassPathXmlApplicationContext<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;conf/idolos.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        Competidor competidor <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Competidor<span style="color: #009900;">&#41;</span> ctx.<span style="color: #006633;">getBean</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;carlos&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        competidor.<span style="color: #006633;">apresentar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>E se a gente quisesse que o Carlos tocasse piano cantando Atirei o Pau no Gato? Simples:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Piano <span style="color: #000000; font-weight: bold;">implements</span> Instrumento <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> tocar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;PLIN PLIN PLIN&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;beans</span> <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span style="color: #009900;">   <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://www.springframework.org/schema/beans</span>
<span style="color: #009900;">       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.AtireiOPauNoGato&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;jose&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Cantor&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;ciranda&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.CirandaCirandinha&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;gaita&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Gaita&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
&nbsp;
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;piano&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.Piano&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;bean</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;carlos&quot;</span> <span style="color: #000066;">class</span>=<span style="color: #ff0000;">&quot;injecaodependencia.CantorTocador&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;musica&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;atireiopau&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
           <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;instrumento&quot;</span> <span style="color: #000066;">ref</span>=<span style="color: #ff0000;">&quot;piano&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
       <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bean<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/beans<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Basta &#8220;injetar&#8221; os beans desejados nas dependências e boa! Tudo segue seu fluxo natural.</p>
<p>Esta foi uma pequena (eu diria mínima) introdução à Injeção de Dependências no Spring Framework. O container ApplicationContext possui muuuuuito mais funções para gerenciar os seus beans, porém isso iria extender demais este assunto.</p>
<p>Acho que se você leu o post até aqui, vc conseguiu pegar o que eu quis passar: programar utilizando interfaces torna o seu código muito mais limpo, fácil de entender, fácil de dar manutenção, fácil de reutilizar, fácil de extender, ou seja, melhora tudo!! </p>
<p>Adicionando isso com a técnica de Injeção de Dependência torna a aplicação altamente desacoplada em termos de componentes (você pode utilizar a classe Cantor em qualquer outra aplicação, só precisa passar uma classe que implemente a interface Musica pra ele e tudo vai funcionar perfeitamente).</p>
<p>Os códigos fontes utilizados neste tutorial estão <a href="http://dl.dropbox.com/u/4918828/InjecaoDependencia.rar">aqui</a>.</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Spring+Framework+Parte+1+-%3E+Dependency+Injection+-+http://tinyurl.com/23b4vlz&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;du=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;cn=Quem%20%C3%A9%20dessa%20%C3%A1rea%20e%20nunca%20ouviu%20falar%20de%20Spring%20Framework%20por%20favor%20levante%20a%20m%C3%A3o..............%20%C3%93timo%2C%20todo%20mundo%20pelo%20menos%20j%C3%A1%20ouviu%20falar%20desse%20tal%20de%20Spring.%0D%0A%0D%0ADurante%20esta%20s%C3%A9rie%20de%20tutoriais%20eu%20vou%20demonstrar%20o%20que%20%C3%A9%2C%20pra%20que%20server%20e%20como%20vc%20pode%20utilizar%20o%20Spring%20para%20facilitar%20seus%20pr" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;t=Spring+Framework+Parte+1+-%3E+Dependency+Injection" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;title=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;summary=Quem%20%C3%A9%20dessa%20%C3%A1rea%20e%20nunca%20ouviu%20falar%20de%20Spring%20Framework%20por%20favor%20levante%20a%20m%C3%A3o..............%20%C3%93timo%2C%20todo%20mundo%20pelo%20menos%20j%C3%A1%20ouviu%20falar%20desse%20tal%20de%20Spring.%0D%0A%0D%0ADurante%20esta%20s%C3%A9rie%20de%20tutoriais%20eu%20vou%20demonstrar%20o%20que%20%C3%A9%2C%20pra%20que%20server%20e%20como%20vc%20pode%20utilizar%20o%20Spring%20para%20facilitar%20seus%20pr&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;title=Spring+Framework+Parte+1+-%3E+Dependency+Injection" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;title=Spring+Framework+Parte+1+-%3E+Dependency+Injection" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Quem%20%C3%A9%20dessa%20%C3%A1rea%20e%20nunca%20ouviu%20falar%20de%20Spring%20Framework%20por%20favor%20levante%20a%20m%C3%A3o..............%20%C3%93timo%2C%20todo%20mundo%20pelo%20menos%20j%C3%A1%20ouviu%20falar%20desse%20tal%20de%20Spring.%0D%0A%0D%0ADurante%20esta%20s%C3%A9rie%20de%20tutoriais%20eu%20vou%20demonstrar%20o%20que%20%C3%A9%2C%20pra%20que%20server%20e%20como%20vc%20pode%20utilizar%20o%20Spring%20para%20facilitar%20seus%20pr" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;title=Spring+Framework+Parte+1+-%3E+Dependency+Injection" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Quem%20%C3%A9%20dessa%20%C3%A1rea%20e%20nunca%20ouviu%20falar%20de%20Spring%20Framework%20por%20favor%20levante%20a%20m%C3%A3o..............%20%C3%93timo%2C%20todo%20mundo%20pelo%20menos%20j%C3%A1%20ouviu%20falar%20desse%20tal%20de%20Spring.%0D%0A%0D%0ADurante%20esta%20s%C3%A9rie%20de%20tutoriais%20eu%20vou%20demonstrar%20o%20que%20%C3%A9%2C%20pra%20que%20server%20e%20como%20vc%20pode%20utilizar%20o%20Spring%20para%20facilitar%20seus%20pr" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fspring-framework-parte-1-dependency-injection%2F&amp;t=Spring+Framework+Parte+1+-%3E+Dependency+Injection" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;body=Link: http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Quem%20%C3%A9%20dessa%20%C3%A1rea%20e%20nunca%20ouviu%20falar%20de%20Spring%20Framework%20por%20favor%20levante%20a%20m%C3%A3o..............%20%C3%93timo%2C%20todo%20mundo%20pelo%20menos%20j%C3%A1%20ouviu%20falar%20desse%20tal%20de%20Spring.%0D%0A%0D%0ADurante%20esta%20s%C3%A9rie%20de%20tutoriais%20eu%20vou%20demonstrar%20o%20que%20%C3%A9%2C%20pra%20que%20server%20e%20como%20vc%20pode%20utilizar%20o%20Spring%20para%20facilitar%20seus%20pr" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/&amp;n=Spring+Framework+Parte+1+-%3E+Dependency+Injection&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=185&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/spring-framework-parte-1-dependency-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Death to DefaultTableModel! AbstractTableModel Rulez!</title>
		<link>http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/</link>
		<comments>http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 03:40:06 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[abstract]]></category>
		<category><![CDATA[abstracttablemodel]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[defaulttablemodel]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jtable]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=171</guid>
		<description><![CDATA[Antes que alguém venha dizer: &#8216;Olha o título, esse cara num sabe nada!&#8217; ou &#8216;DefaultTableModel extends AbstractTableModel!! Asshole!!!&#8217; eu já vou dizendo: Eu sei que DefaultTableModel herda de AbstractTableModel, a ideia do título é abandonar a DefaultTableModel e criar suas próprias classes utilizando os métodos da AbstractTableModel do jeito que nos servir melhor.
Dito isso, vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Antes que alguém venha dizer: &#8216;Olha o título, esse cara num sabe nada!&#8217; ou &#8216;DefaultTableModel extends AbstractTableModel!! Asshole!!!&#8217; eu já vou dizendo: Eu sei que DefaultTableModel herda de AbstractTableModel, a ideia do título é abandonar a DefaultTableModel e criar suas próprias classes utilizando os métodos da AbstractTableModel do jeito que nos servir melhor.</p>
<p>Dito isso, vamos  ao assunto de hoje: &#8216;DefaultTableModel e o porque de não utilizá-la&#8217;.</p>
<p>Quem já programou utilizando a API Swing e nunca utilizou a JTable que atire a primeira pedra.</p>
<p>Agora, quem já usou JTable e nunca utilizou a DefaultTableModel pode atirar pedras a vontade!</p>
<p>Aqui no blog mesmo&#8230; Eu já utilizei DefaultTabelModel em alguns posts. Mas pois bem, vamos abolir essa má prática. Seguem alguns motivos do porque não devemos utilizar a DefaultTableModel:</p>
<p>1. É mais difícil que escrever seu próprio TableModel;<br />
2. É mais lento (usa classes sincronizadas);<br />
3. Ocupa mais espaço em memória (duplica seus dados);<br />
4. Deixa o código mais confuso e difícil de manter;<br />
5. Usa casts inseguros;<br />
6. Força que você tenha que exibir informações desnecessárias (como o ID) na tabela, ou controlar o ID numa lista separada;<br />
7. Faz a sua mulher te deixar, o leite da sua geladeira azedar, e pessoas apontarem o dedo para você na rua.</p>
<p>Motivos muito bem explicados pelo ViniGodoy <a href="http://www.guj.com.br/posts/list/15/149861.java#813171" target="_blank">neste post</a> do <a href="http://www.guj.com.br" target="_blank">GUJ</a>.</p>
<p>Mas se a DefaultTableModel é tão ruim assim, o que devemos fazer? Tudo se resume a uma classe: AbstractTableModel.</p>
<p><span id="more-171"></span></p>
<p>Tudo o que temos que fazer é criar uma nova classe que extenda AbstractTableModel e customizá-la para exibir os dados que queremos. Concordo que em um primeiro momento vai parecer meio desnecessário escrever uma classe para cada tabela do seu sistema (ou uma genérica), mas isso compensa muito na hora de utilizá-la, e compensa mais ainda na hora de reutilizá-la (o famoso reuso da orientação a objetos).</p>
<p>Mas chega de conversa, vamos a prática pois é o melhor jeito de fixar as coisas&#8230;</p>
<p>Nosso escopo será o seguinte: uma loja qualquer quer controlar seu estoque. Em algum lugar dentro do software que realizará esta tarefa vai ter uma tela de consulta dos produtos e suas respectivas quantidades disponíveis em estoque.</p>
<p>É nessa tela que nosso tutorial irá decorrer. Uma tela de consulta de produtos com alguns botões só para demonstrar o funcionamento do nosso modelo.</p>
<p>Abra o NetBeans, crie um novo projeto para área de trabalho, apague tudo que ele cria, crie um novo pacote, crie um novo JFrame dentro dele e deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/Capturar.png"><img class="aligncenter size-full wp-image-176" title="atm_form" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/Capturar.png" alt="" width="318" height="390" /></a></p>
<p>O JFrame contém os seguintes componentes:</p>
<ul>
<li>1 JTable (que já vem dentro do seu JScrollPane)</li>
<li>5 JButtons</li>
</ul>
<p>Os textos dos botões já explicam qual será a função de cada um deles certo?</p>
<p>Agora vamos a nossa classe base (da camada de modelo) que vai representar os produtos do nosso controle de estoque. Segue a classe Produto.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Produto <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> nome<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod, <span style="color: #003399;">String</span> nome, <span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">quant</span> <span style="color: #339933;">=</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getCod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setCod<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> cod<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">cod</span> <span style="color: #339933;">=</span> cod<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setNome<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> nome<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">nome</span> <span style="color: #339933;">=</span> nome<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getQuant<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setQuant<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> quant<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">quant</span> <span style="color: #339933;">=</span> quant<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Uma simples classe para representar um produto. Coloquei o código também porque geralmente sempre precisamos controlar o código dos registros que estão sendo apresentados na tabela. Utilizando DefaultTableModel nós deveríamos ter uma lista separada para poder controlar esses códigos. Mais a frente veremos como seria com nosso novo modelo para a tabela.</p>
<p>Vamos agora para a parte que importa: criar uma classe que herde de AbstractTableModel. A classe AbstractTableModel define alguns métodos que nós podemos reescrever para criar um modelo bem mais fácil de trabalhar. Seguem os métodos, que iremos utilizar neste exemplo, e suas respectivas funções:</p>
<ul>
<li>int getRowCount() -&gt; retorna o número de linhas que a tabela tem;</li>
<li>int getColumnCount() -&gt; retorna o número de colunas que a tabela tem;</li>
<li>String getColumnName(int column)-&gt; retorna o nome que será exibido na coluna (o índice da primeira coluna é 0);</li>
<li>Class&lt;?&gt; getColumnClass(int columnIndex) -&gt; retorna a classe que representa cada coluna. String irá mostrar o texto alinhado à esquerda, Integer irá mostrar o número alinhado à direita, Boolean irá mostrar um checkbox&#8230; ;</li>
<li>Object getValueAt(int rowIndex, int columnIndex) -&gt; método utilizado pela JTable para escrever os valores nas células. Internamente a JTable passa em todas as celulas chamando este método para poder setar os valores;</li>
<li>??void setValueAt(Object aValue, int rowIndex, int columnIndex) -&gt; método que a JTable chama quando uma célula é editada;</li>
<li>boolean isCellEditable(int rowIndex, int columnIndex) -&gt; método para saber se a célula é ou não editável;</li>
<li>void fireTableDataChanged() -&gt; método que avisa todos os listeners da tabela que houve uma mudança nos dados, um deles é o responsável por desenhar a tabela e ao ser notificado irá redesenhá-la.</li>
</ul>
<p>Ok, agora que já conhecemos alguns dos métodos que a AbstractTableModel fornece, vamos reescrevê-los. Segue o código do arquivo ProdutoTableModel.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ProdutoTableModel <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">AbstractTableModel</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//constantes que vão representar as colunas</span>
    <span style="color: #666666; font-style: italic;">//(só para facilitar o entendimento do código)</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> COL_NOME <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> COL_QUANT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//lista dos produtos que serão exibidos</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">List</span> produtos<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> ProdutoTableModel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> ProdutoTableModel<span style="color: #009900;">&#40;</span><span style="color: #003399;">List</span> lista<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        produtos.<span style="color: #006633;">addAll</span><span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getRowCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//cada produto na lista será uma linha</span>
        <span style="color: #000000; font-weight: bold;">return</span> produtos.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getColumnCount<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//vamos exibir só Nome e Quantidade, então são 2 colunas</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getColumnName<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> column<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//qual o nome da coluna</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>column <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Nome&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>column <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;Quant. Disp&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">Class</span> getColumnClass<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//retorna a classe que representa a coluna</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">String</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">Integer</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #003399;">String</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> getValueAt<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//pega o produto da linha</span>
        Produto p <span style="color: #339933;">=</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>rowIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//verifica qual valor deve ser retornado</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> p.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> p.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setValueAt<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> aValue, <span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//pega o produto da linha</span>
        Produto p <span style="color: #339933;">=</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>rowIndex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//verifica qual valor vai ser alterado</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_NOME<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            p.<span style="color: #006633;">setNome</span><span style="color: #009900;">&#40;</span>aValue.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>columnIndex <span style="color: #339933;">==</span> COL_QUANT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            p.<span style="color: #006633;">setQuant</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>aValue.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que os dados mudaram</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> isCellEditable<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> rowIndex, <span style="color: #000066; font-weight: bold;">int</span> columnIndex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//no nosso caso todas vão ser editáveis, entao retorna true pra todas</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Até agora eu só reescrevi os métodos que foram citados anteriormente. Agora nós vamos à parte produtiva da coisa: vamos escrever os métodos para inserir um novo produto, para remover produtos, para ordená-los e para embaralhá-los, ou seja, vamos dar vida aos nossos botões e o melhor: ver como isso é muito fácil!</p>
<p>Mais alguns métodos para a nossa classe ProdutoTableModel.java:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> inserir<span style="color: #009900;">&#40;</span>Produto p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> excluir<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> excluir<span style="color: #009900;">&#40;</span>Produto p<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        produtos.<span style="color: #006633;">remove</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ordenarPorNome<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//ordena pelo nome</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>produtos, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Comparator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> compare<span style="color: #009900;">&#40;</span>Produto o1, Produto o2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> o1.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">compareTo</span><span style="color: #009900;">&#40;</span>o2.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> ordenarPorQuantidade<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//ordena pelo nome</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">sort</span><span style="color: #009900;">&#40;</span>produtos, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Comparator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> compare<span style="color: #009900;">&#40;</span>Produto o1, Produto o2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">return</span> o1.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> o2.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> misturar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//mistura a lista</span>
        <span style="color: #003399;">Collections</span>.<span style="color: #006633;">shuffle</span><span style="color: #009900;">&#40;</span>produtos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//avisa que a tabela foi alterada</span>
        fireTableDataChanged<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto getCliente<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> pos<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>pos <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span> <span style="color: #339933;">||</span> pos <span style="color: #339933;">&gt;=</span> produtos.<span style="color: #006633;">size</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> produtos.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>pos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Pronto! Veja como é fácil manipular os dados da tabela agora. Basta manipular uma lista!</p>
<p>Acho que os únicos métodos que merecem alguma explicação são os de ordenação, onde, em cada um deles é criado um objeto <strong>Comparator </strong>que ordena de acordo com a necessidade: se é por ordem alfabética dos nomes, compara os nomes, se é pela quantidade em estoque, compara as quantidades.</p>
<p>OBS: Lembre sempre de chamar o método <strong>fireTableDataChanged()</strong> para avisar que os dados mudaram e a tabela ser redesenahda.</p>
<p>Voltando para aquela ideia de que esta tela seria uma tela de busca&#8230; possívelmente ela poderia ser chamada de uma outra tela (a de entrada de produtos por exemplo) para facilitar a busca de um produto. Como seria a recuperação do código do produto selecionado na tabela? Mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> BuscaProdutos <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JDialog</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//....</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Produto retornaProdutoSelecionado<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        ProdutoTableModel model <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ProdutoTableModel<span style="color: #009900;">&#41;</span> jT_TabelaProdutos.<span style="color: #006633;">getModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">return</span> model.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span>jT_TabelaProdutos.<span style="color: #006633;">getSelectedRow</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EntradaProdutos <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JDialog</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//...</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> buscaProduto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//cria a tela de busca como modal</span>
        BuscaProdutos tela_busca <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> BuscaProdutos<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span>, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//exibe</span>
        tela_busca.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recupera os dados</span>
        Produto p <span style="color: #339933;">=</span> tela_busca.<span style="color: #006633;">retornaProdutoSelecionado</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>p <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            jTF_Codigo.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getCod</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTF_Nome.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTF_Quantidade.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>p.<span style="color: #006633;">getQuant</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A tabela ficaria na tela de busca. Tal tela seria chamada como modal (só ela poderia ter o foco enquanto estivesse visível) e quando se tornasse invisível, o produto selecionado seria recuperado e usado como necessário.</p>
<p>Quanto trabalho não seria necessário para fazer isso utilizando a DefaultTableModel?</p>
<p>Voltando à nossa aplicação inicial, ainda temos que linkar os botões com as funções do modelo. Vamos ao código da classe Principal.java (JFrame da foto lá em cima):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> ProdutoTableModel model<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//variável só para controlar os códigos dos produtos</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> ultimoCod<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        ultimoCod <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria a lista com os produtos</span>
        ArrayList<span style="color: #339933;">&lt;</span>Produto<span style="color: #339933;">&gt;</span> lista <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Lapiseira 0.7&quot;</span>,<span style="color: #cc66cc;">30</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta preta&quot;</span>,<span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta azul&quot;</span>,<span style="color: #cc66cc;">70</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>,<span style="color: #0000ff;">&quot;Caneta vermelha&quot;</span>,<span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//cria o modelo de Produto</span>
        model <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ProdutoTableModel<span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//atribui o modelo à tabela</span>
        jTable1.<span style="color: #006633;">setModel</span><span style="color: #009900;">&#40;</span>model<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Inserir</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton1ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                         
        <span style="color: #003399;">Random</span> r <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Produto p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Produto<span style="color: #009900;">&#40;</span>ultimoCod<span style="color: #339933;">++</span>, <span style="color: #0000ff;">&quot;Produto &quot;</span><span style="color: #339933;">+</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span>r.<span style="color: #006633;">nextInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, r.<span style="color: #006633;">nextInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        model.<span style="color: #006633;">inserir</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Excluir</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton2ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                         
        <span style="color: #000066; font-weight: bold;">int</span> selecionados<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> jTable1.<span style="color: #006633;">getSelectedRows</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>selecionados.<span style="color: #006633;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            ArrayList<span style="color: #339933;">&lt;</span>Produto<span style="color: #339933;">&gt;</span> seraoExcluidos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Produto<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i<span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>selecionados.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
                seraoExcluidos.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>model.<span style="color: #006633;">getCliente</span><span style="color: #009900;">&#40;</span>selecionados<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Produto p <span style="color: #339933;">:</span> seraoExcluidos<span style="color: #009900;">&#41;</span>
                model.<span style="color: #006633;">excluir</span><span style="color: #009900;">&#40;</span>p<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>            
        <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Selecione alguém neh...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>                                        
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Ordenar por Quantidade</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton5ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                         
        model.<span style="color: #006633;">ordenarPorQuantidade</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>                  
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Ordenar por Nome</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton3ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                         
        model.<span style="color: #006633;">ordenarPorNome</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>                                        
&nbsp;
    <span style="color: #666666; font-style: italic;">//Ação do botão Misturar</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jButton4ActionPerformed<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">ActionEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>                                         
        model.<span style="color: #006633;">misturar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #339933;">/</span>...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No construtor é criada uma lista com alguns produtos fictícios e também é instanciado o nosso TableModel.</p>
<p>O botão inserir insere um produto com o nome &#8220;Produto i&#8221; e quantidade Q, onde &#8216;i&#8217; e &#8216;Q&#8217; são números randômicos.</p>
<p>O botão excluir trata a exclusão de vários ítens selecionados ao mesmo tempo. Primeiro todos são guardados em uma lista auxiliar e depois eles vão sendo excluídos um a um (Você sabe por que eu fiz assim? Pense um pouco&#8230; qualquer coisa a área de comentários está logo abaixo).</p>
<p>Os botões Ordenar por Nome, Ordenar por Quantidade e Misturar são auto explicativos e fazem exatamente o que o seu nome quer dizer.</p>
<p>Bom, chegamos ao fim de mais um artigo aqui do Java Simples. E fica meu conselho: pare de usar DefaultTableModel e começe agora mesmo a escrever suas próprias TableModels.</p>
<p>O código fonte do projeto está disponível <a href="http://dl.dropbox.com/u/4918828/AbstractTableModel.rar">aqui</a>! E se achou interessante compartilhe este artigo utilizando a barra social logo abaixo. =]</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21+-+http://tinyurl.com/28c8nk3&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;du=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;cn=Antes%20que%20algu%C3%A9m%20venha%20dizer%3A%20%27Olha%20o%20t%C3%ADtulo%2C%20esse%20cara%20num%20sabe%20nada%21%27%20ou%20%27DefaultTableModel%20extends%20AbstractTableModel%21%21%20Asshole%21%21%21%27%20eu%20j%C3%A1%20vou%20dizendo%3A%20Eu%20sei%20que%20DefaultTableModel%20herda%20de%20AbstractTableModel%2C%20a%20ideia%20do%20t%C3%ADtulo%20%C3%A9%20abandonar%20a%20DefaultTableModel%20e%20criar%20suas%20pr%C3%B3prias%20classes%20ut" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;t=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;title=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;summary=Antes%20que%20algu%C3%A9m%20venha%20dizer%3A%20%27Olha%20o%20t%C3%ADtulo%2C%20esse%20cara%20num%20sabe%20nada%21%27%20ou%20%27DefaultTableModel%20extends%20AbstractTableModel%21%21%20Asshole%21%21%21%27%20eu%20j%C3%A1%20vou%20dizendo%3A%20Eu%20sei%20que%20DefaultTableModel%20herda%20de%20AbstractTableModel%2C%20a%20ideia%20do%20t%C3%ADtulo%20%C3%A9%20abandonar%20a%20DefaultTableModel%20e%20criar%20suas%20pr%C3%B3prias%20classes%20ut&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;title=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;title=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Antes%20que%20algu%C3%A9m%20venha%20dizer%3A%20%27Olha%20o%20t%C3%ADtulo%2C%20esse%20cara%20num%20sabe%20nada%21%27%20ou%20%27DefaultTableModel%20extends%20AbstractTableModel%21%21%20Asshole%21%21%21%27%20eu%20j%C3%A1%20vou%20dizendo%3A%20Eu%20sei%20que%20DefaultTableModel%20herda%20de%20AbstractTableModel%2C%20a%20ideia%20do%20t%C3%ADtulo%20%C3%A9%20abandonar%20a%20DefaultTableModel%20e%20criar%20suas%20pr%C3%B3prias%20classes%20ut" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;title=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Antes%20que%20algu%C3%A9m%20venha%20dizer%3A%20%27Olha%20o%20t%C3%ADtulo%2C%20esse%20cara%20num%20sabe%20nada%21%27%20ou%20%27DefaultTableModel%20extends%20AbstractTableModel%21%21%20Asshole%21%21%21%27%20eu%20j%C3%A1%20vou%20dizendo%3A%20Eu%20sei%20que%20DefaultTableModel%20herda%20de%20AbstractTableModel%2C%20a%20ideia%20do%20t%C3%ADtulo%20%C3%A9%20abandonar%20a%20DefaultTableModel%20e%20criar%20suas%20pr%C3%B3prias%20classes%20ut" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fdeath-to-defaulttablemodel-abstracttablemodel-rulez%2F&amp;t=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Antes%20que%20algu%C3%A9m%20venha%20dizer%3A%20%27Olha%20o%20t%C3%ADtulo%2C%20esse%20cara%20num%20sabe%20nada%21%27%20ou%20%27DefaultTableModel%20extends%20AbstractTableModel%21%21%20Asshole%21%21%21%27%20eu%20j%C3%A1%20vou%20dizendo%3A%20Eu%20sei%20que%20DefaultTableModel%20herda%20de%20AbstractTableModel%2C%20a%20ideia%20do%20t%C3%ADtulo%20%C3%A9%20abandonar%20a%20DefaultTableModel%20e%20criar%20suas%20pr%C3%B3prias%20classes%20ut" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/&amp;n=Death+to+DefaultTableModel%21+AbstractTableModel+Rulez%21&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=171&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/death-to-defaulttablemodel-abstracttablemodel-rulez/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Web Services de um jeito bem simples</title>
		<link>http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/</link>
		<comments>http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 02:09:57 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jax]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[services]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ws]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=151</guid>
		<description><![CDATA[Web Services (Serviços Web) são softwares que ficam esperando requisições de outros softwares. Uma vez que essas requisições são recebidas, é identificado o serviço que está sendo requisitado, o serviço é executado e finalmente a resposta é devolvida para quem pediu.
Em um resumo bem grosso, isso é um web service. Um programa que executa um [...]]]></description>
			<content:encoded><![CDATA[<p>Web Services (Serviços Web) são softwares que ficam esperando requisições de outros softwares. Uma vez que essas requisições são recebidas, é identificado o serviço que está sendo requisitado, o serviço é executado e finalmente a resposta é devolvida para quem pediu.</p>
<p>Em um resumo bem grosso, isso é um web service. Um programa que executa um método e devolve a resposta pra outro programa que pediu.</p>
<p>Por que eles são tão famosos? Uma das vantagens é a independência de linguagem, ou seja, um web service implementado em Java pode muito bem ser consumido (termo comum quando se fala em web services, equivalente a &#8220;usar&#8221;) por um outro software implementado em C# ou Python ou qualquer outra linguagem, pois o XML é adotado para garantir a comunicação padronizada.</p>
<p>Existem alguns tipos diferentes de web services onde, dentre eles, os que utilizam SOAP/ WSDL e os baseados no modelo arquitetural REST são os mais conhecidos. Neste post eu irei explicar como criar e consumir web services que utilizam SOAP e WSDL, e irei assumir que você já tenha pelo menos uma ideia do que estas siglas significam.</p>
<p>Eu poderia escrever uns dois ou três posts só sobre a teoria e aplicações, mas ficaria meio chato&#8230; Como o legal é a prática, vamos imaginar uma situação problema e criar um web service para resolver esse problema.</p>
<p><span id="more-151"></span></p>
<p>Vamos imaginar o seguinte cenário: um jornal quer disponibilizar um serviço para distribuir notícias pela internet. Sendo assim as pessoas podem colocar informações confiáveis no seu site, e toda vez que o pessoal da redação adicionar uma nova notícia, ela aparece em todos os sites que consomem o serviço.</p>
<p>Com esse cenário em mente, vamos ao Java. Estou utilizando o NetBeans 6.8 que tem uns assistentes bem legais para usar web services.</p>
<p>Vamos criar um novo projeto Web que será o nosso web service. Eu dei o nome de WSNoticias e como container escolhi o Tomcat 6.0.20.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_projeto.png"><img class="aligncenter size-medium wp-image-153" title="novo_projeto" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_projeto-300x207.png" alt="" width="300" height="207" /></a></p>
<p>Agora vamos criar o Web Service propriamente dito. Botão direito no projeto, Novo, Outro. Selecione a categoria Serviços Web e depois selecione Serviço Web.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_servico.png"><img class="aligncenter size-medium wp-image-155" title="novo_servico" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_servico-300x208.png" alt="" width="300" height="208" /></a></p>
<p>Dei o nome de &#8216;ServicoNoticias&#8217; para o serviço e para o pacote dei o nome &#8216;ws&#8217;.</p>
<p>O NetBeans já cria a classe que será nosso serviço web. Vamos agora pensar em quais métodos estarão disponíveis para as pessoas utilizarem.</p>
<p>No nosso caso (jornal, notícias, &#8230;), o web service terá apenas um método chamado &#8220;recuperaNoticias()&#8221; que retorna uma lista de objetos &#8220;Noticia&#8221;. A partir dai a aplicação que recuperar essa lista irá exibí-la da maneira que achar melhor.</p>
<p>Vamos então ao código da classe Noticia (dentro do pacote &#8216;modelo&#8217;):</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Noticia <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> texto<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> titulo, <span style="color: #003399;">String</span> texto<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">titulo</span> <span style="color: #339933;">=</span> titulo<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">texto</span> <span style="color: #339933;">=</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTexto<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTexto<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> texto<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">texto</span> <span style="color: #339933;">=</span> texto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getTitulo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTitulo<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> titulo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">titulo</span> <span style="color: #339933;">=</span> titulo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Apenas uma simples classe que vai representar as notícias, nada de mais.</p>
<p>Agora vamos para a classe do web service de novo e vamos adicionar uma nova operaçao. Abra a classe do web service. Na parte de cima do editor de texto do NetBeans vai ter duas opções: &#8220;Código Fonte&#8221; e &#8220;Projeto&#8221;. Selecione Projeto e clique em &#8220;Adicionar operação&#8230;&#8221;.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/nova_operacao.png"><img class="aligncenter size-medium wp-image-157" title="nova_operacao" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/nova_operacao-300x218.png" alt="" width="300" height="218" /></a></p>
<p>Como a nossa operação é bem simples, vai apenas retornar as notícias, só precisamos definir o nome e o tipo de retorno. Aqui o tipo deve ser sempre totalmente qualificado, ou seja, o nome do pacote que ele está e o nome da classe.</p>
<p>Voltado pra exibição do código fonte, o NetBeans já criou o método. Vamos ao código dele:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@WebMethod<span style="color: #009900;">&#40;</span>operationName <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;recuperaNoticias&quot;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">public</span> java.<span style="color: #006633;">util</span>.<span style="color: #003399;">ArrayList</span> recuperaNoticias<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">ArrayList</span> lista <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia1&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia2&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia3&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 3&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        lista.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Noticia<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Noticia4&quot;</span>,<span style="color: #0000ff;">&quot;Descrição da notícia 4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> lista<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para não estender muito o post, não vou utilizar banco de dados, vamos apenas simular que o método retorne algumas notícias, mas o correto seria realizar a conexão e recuperar os dados de algum outro lugar.</p>
<p>Pronto! Esse é o nosso web service! Execute a aplicação e o NetBeans irá iniciar o Tomcat, irá fazer o deploy da aplicação e irá abrir o browser no caminho do Web Service.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/servico_online.png"><img class="aligncenter size-medium wp-image-158" title="servico_online" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/servico_online-300x197.png" alt="" width="300" height="197" /></a></p>
<p>Apareceu esse Heelo World! porque a página index.html não foi alterada, mas tudo bem, a interface gráfica não interessa, o que interessa é que o web service já está rodando no container, já está esperando por requisições. Tudo o que temos que fazer é criar um software que consuma esse web service.</p>
<p>A URL do WSDL do web service é: http://localhost:8084/WSNoticias/ServicoNoticias?wsdl</p>
<p>A URL do WSDL é sempre composta da seguinte maneira: http://&lt;servidor&gt;:&lt;porta&gt;/&lt;nome_aplicacao&gt;/&lt;nome_web_service&gt;?wsdl<br />
Lembre-se do caminho do WSDL pois eh a partir dele que o cliente vai conseguir consumir o serviço.</p>
<p>Vamos criar agora um novo site que exiba as notícias então: crie uma nova Aplicação Web (eu chamei de WSNoticias_Cliente) e vamos criar as classes necessárias para consumir o serviço (quando eu digo nós, eu quero dizer: o NetBeans): botão direito no projeto e clique em Novo, Outro. Na categoria selecione &#8220;Serviços Web&#8221; e então &#8220;Cliente para serviço Web&#8221;.</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente.png"><img class="aligncenter size-medium wp-image-161" title="novo_cliente" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente-300x206.png" alt="" width="300" height="206" /></a></p>
<p>Na próxima tela existem 3 opções para criar um cliente:</p>
<p>Projeto -&gt; caso o projeto do NetBeans do web service esteja no mesmo computador, você pode importar as configurações dele apenas especificando qual é o projeto;</p>
<p>Arquivo Local -&gt; caso você tenha o arquivo WSDL salvo localmente, basta apontá-lo;</p>
<p>WSDL URL -&gt; para web services que você só sabe a URL do arquivo WSDL, basta informar a URL que o NetBeans vai buscar o arquivo.</p>
<p>No nosso caso, poderíamos utilizar a primeira opção, porém eu prefiro passar a URL do WSDL, fica a critério de cada um. E não esqueçam de por o nome de um pacote para os arquivos que serão gerados.<br />
<a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente2.png"><img class="aligncenter size-medium wp-image-162" title="novo_cliente2" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/novo_cliente2-300x207.png" alt="" width="300" height="207" /></a></p>
<p>Se tudo der certo o NetBeans vai gerar alguns arquivos que vão possibilitar o nosso site consumir aquele web service.</p>
<p>Uma nova pasta será criada no projeto: &#8220;Códigos-fonte gerados (jax-ws)&#8221; e dentro dela está o pacote que contém os arquivos. Você pode fuçar a vontade para ver como as coisas acontecem, mas para este post só algumas classes são relevantes:</p>
<p>Noticia -&gt; repare que todas as classes customizadas que o web service retorna ou recebe como parâmetro ou até mesmo classes de exceção são criadas para que possa haver uma comunicação correta;</p>
<p>ServicoNoticiasService -&gt; essa classe é a responsável por criar a comunicação com o web service.</p>
<p>ServicoNoticias -&gt; esta interface é que define quais são os métodos disponíveis pelo web service.</p>
<p>Eu vou fazer algo MUITO errado agora, que é utilizar scriptlets no JSP para controlar toda a lógica da minha aplicação, mas como é só para efeitos de demonstração, então tudo bem.</p>
<p>Segue o código da página index.html do projeto WSNoticias_Cliente:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #339933;">&lt;%</span>@page contentType<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html&quot;</span> pageEncoding<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;!</span>DOCTYPE <span style="color: #003399;">HTML</span> <span style="color: #000000; font-weight: bold;">PUBLIC</span> <span style="color: #0000ff;">&quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span>
   <span style="color: #0000ff;">&quot;http://www.w3.org/TR/html4/loose.dtd&quot;</span><span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;%</span>@page <span style="color: #000000; font-weight: bold;">import</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;ws.cliente.*&quot;</span> <span style="color: #339933;">%&gt;</span>
<span style="color: #339933;">&lt;</span>html<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>head<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>meta http<span style="color: #339933;">-</span>equiv<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;Content-Type&quot;</span> content<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;text/html; charset=UTF-8&quot;</span><span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;</span>title<span style="color: #339933;">&gt;</span>Notícias<span style="color: #339933;">&lt;/</span>title<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
        <span style="color: #339933;">&lt;%</span>
            <span style="color: #666666; font-style: italic;">//cria a comunicação com o Web Service</span>
            ServicoNoticiasService ws <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ServicoNoticiasService<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//recupera uma classe que implemente a interface do nosso Web Service</span>
            ServicoNoticias noticias <span style="color: #339933;">=</span> ws.<span style="color: #006633;">getServicoNoticiasPort</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//agora basta utilizar os métodos disponíveis pelo web service</span>
            java.<span style="color: #006633;">util</span>.<span style="color: #006633;">List</span><span style="color: #339933;">&lt;</span>Noticia<span style="color: #339933;">&gt;</span> lista <span style="color: #339933;">=</span> noticias.<span style="color: #006633;">recuperaNoticias</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//exibindo na pagina</span>
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Noticia n <span style="color: #339933;">:</span> lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                out.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>n.<span style="color: #006633;">getTitulo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;br&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                out.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span>n.<span style="color: #006633;">getTexto</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;hr&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #339933;">%&gt;</span>
    <span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Os comentários no código explicam tudo o que está acontecendo: primeiro é feita a conexão com o web service, depois é recuperada uma classe que consegue executar os métodos do web service e dai pra frente basta chamar os métodos e utilizá-los.</p>
<p>O resultado foi este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/06/cliente_online.png"><img class="aligncenter size-medium wp-image-165" title="cliente_online" src="http://www.javasimples.com.br/wp-content/uploads/2010/06/cliente_online-300x252.png" alt="" width="300" height="252" /></a></p>
<p>Bom, é isso ai.</p>
<p>Eu pessoalmente achei muito produtivo o NetBeans para a criação e consumação de Web Services, um jeito realmente muito simples.</p>
<p>Quem quiser pegar os projetos, estão <a href="http://dl.dropbox.com/u/4918828/Web%20Services.rar" target="_blank">aqui</a>.</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Web+Services+de+um+jeito+bem+simples+-+http://tinyurl.com/23bt2pc&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Web+Services+de+um+jeito+bem+simples&amp;du=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;cn=Web%20Services%20%28Servi%C3%A7os%20Web%29%20s%C3%A3o%20softwares%20que%20ficam%20esperando%20requisi%C3%A7%C3%B5es%20de%20outros%20softwares.%20Uma%20vez%20que%20essas%20requisi%C3%A7%C3%B5es%20s%C3%A3o%20recebidas%2C%20%C3%A9%20identificado%20o%20servi%C3%A7o%20que%20est%C3%A1%20sendo%20requisitado%2C%20o%20servi%C3%A7o%20%C3%A9%20executado%20e%20finalmente%20a%20resposta%20%C3%A9%20devolvida%20para%20quem%20pediu.%0D%0A%0D%0AEm%20um%20resumo%20bem" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;t=Web+Services+de+um+jeito+bem+simples" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;title=Web+Services+de+um+jeito+bem+simples&amp;summary=Web%20Services%20%28Servi%C3%A7os%20Web%29%20s%C3%A3o%20softwares%20que%20ficam%20esperando%20requisi%C3%A7%C3%B5es%20de%20outros%20softwares.%20Uma%20vez%20que%20essas%20requisi%C3%A7%C3%B5es%20s%C3%A3o%20recebidas%2C%20%C3%A9%20identificado%20o%20servi%C3%A7o%20que%20est%C3%A1%20sendo%20requisitado%2C%20o%20servi%C3%A7o%20%C3%A9%20executado%20e%20finalmente%20a%20resposta%20%C3%A9%20devolvida%20para%20quem%20pediu.%0D%0A%0D%0AEm%20um%20resumo%20bem&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;title=Web+Services+de+um+jeito+bem+simples" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;title=Web+Services+de+um+jeito+bem+simples" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Web+Services+de+um+jeito+bem+simples&amp;body=Link: http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Web%20Services%20%28Servi%C3%A7os%20Web%29%20s%C3%A3o%20softwares%20que%20ficam%20esperando%20requisi%C3%A7%C3%B5es%20de%20outros%20softwares.%20Uma%20vez%20que%20essas%20requisi%C3%A7%C3%B5es%20s%C3%A3o%20recebidas%2C%20%C3%A9%20identificado%20o%20servi%C3%A7o%20que%20est%C3%A1%20sendo%20requisitado%2C%20o%20servi%C3%A7o%20%C3%A9%20executado%20e%20finalmente%20a%20resposta%20%C3%A9%20devolvida%20para%20quem%20pediu.%0D%0A%0D%0AEm%20um%20resumo%20bem" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;title=Web+Services+de+um+jeito+bem+simples" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Web+Services+de+um+jeito+bem+simples&amp;body=Link: http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Web%20Services%20%28Servi%C3%A7os%20Web%29%20s%C3%A3o%20softwares%20que%20ficam%20esperando%20requisi%C3%A7%C3%B5es%20de%20outros%20softwares.%20Uma%20vez%20que%20essas%20requisi%C3%A7%C3%B5es%20s%C3%A3o%20recebidas%2C%20%C3%A9%20identificado%20o%20servi%C3%A7o%20que%20est%C3%A1%20sendo%20requisitado%2C%20o%20servi%C3%A7o%20%C3%A9%20executado%20e%20finalmente%20a%20resposta%20%C3%A9%20devolvida%20para%20quem%20pediu.%0D%0A%0D%0AEm%20um%20resumo%20bem" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fweb-services-de-um-jeito-bem-simples%2F&amp;t=Web+Services+de+um+jeito+bem+simples" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Web+Services+de+um+jeito+bem+simples&amp;body=Link: http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Web%20Services%20%28Servi%C3%A7os%20Web%29%20s%C3%A3o%20softwares%20que%20ficam%20esperando%20requisi%C3%A7%C3%B5es%20de%20outros%20softwares.%20Uma%20vez%20que%20essas%20requisi%C3%A7%C3%B5es%20s%C3%A3o%20recebidas%2C%20%C3%A9%20identificado%20o%20servi%C3%A7o%20que%20est%C3%A1%20sendo%20requisitado%2C%20o%20servi%C3%A7o%20%C3%A9%20executado%20e%20finalmente%20a%20resposta%20%C3%A9%20devolvida%20para%20quem%20pediu.%0D%0A%0D%0AEm%20um%20resumo%20bem" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/&amp;n=Web+Services+de+um+jeito+bem+simples&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=151&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/web-services-de-um-jeito-bem-simples/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Serialização &#8211; Transformando Objetos em Bytes</title>
		<link>http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/</link>
		<comments>http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:37:56 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[bytes]]></category>
		<category><![CDATA[disco]]></category>
		<category><![CDATA[enviar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[salvar]]></category>
		<category><![CDATA[serializacao]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[transformando]]></category>
		<category><![CDATA[transformar]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=135</guid>
		<description><![CDATA[Serialização&#8230; funcionalidade bem interesante do Java (e muitas outras linguagens).
Afinal, o que é a serialização?
Serialização é a técnica que permite transformar objetos em bytes, e uma vez que eles são bytes, eles podem ser salvos em disco ou enviados através de um stream (via HTTP, via socket, entre outros).
Vou exemplificar apenas como salvar e recuperar [...]]]></description>
			<content:encoded><![CDATA[<p>Serialização&#8230; funcionalidade bem interesante do Java (e muitas outras linguagens).</p>
<p>Afinal, o que é a serialização?</p>
<p>Serialização é a técnica que permite transformar objetos em bytes, e uma vez que eles são bytes, eles podem ser salvos em disco ou enviados através de um stream (via HTTP, via socket, entre outros).</p>
<p>Vou exemplificar apenas como salvar e recuperar os objetos no disco, uma vez que eu não estou muito acostumado com os sockets e enviar requisições HTTP iria extender muito o tópico.</p>
<p><span id="more-135"></span></p>
<p>No exemplo iremos utilizar a classe Tenis (não sei de onde eu tirei isso&#8230;).</p>
<p>Tenis.java</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Tenis <span style="color: #000000; font-weight: bold;">implements</span> java.<span style="color: #006633;">io</span>.<span style="color: #003399;">Serializable</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> marca<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> modelo<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Tenis<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> Tenis<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> tamanho, <span style="color: #003399;">String</span> marca, <span style="color: #003399;">String</span> modelo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">tamanho</span> <span style="color: #339933;">=</span> tamanho<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">marca</span> <span style="color: #339933;">=</span> marca<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">modelo</span> <span style="color: #339933;">=</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getMarca<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> marca<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setMarca<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> marca<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">marca</span> <span style="color: #339933;">=</span> marca<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> getModelo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setModelo<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> modelo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">modelo</span> <span style="color: #339933;">=</span> modelo<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> getTamanho<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setTamanho<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> tamanho<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">tamanho</span> <span style="color: #339933;">=</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">marca</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span> <span style="color: #339933;">+</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">modelo</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - Tamanho: &quot;</span> <span style="color: #339933;">+</span> <span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">tamanho</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>OBS: todo objeto que você quer serializar deve OBRIGATORIAMENTE implementar a interface <strong>java.io.Serializable</strong>. Essa interface não possui nenhum método, é apenas uma indicação para a JVM saber que este objeto pode ser serializado.</p>
<p>Segue o código do programa principal do nosso exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span> listaTenis <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	listaTenis.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Tenis<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">44</span>, <span style="color: #0000ff;">&quot;Nike&quot;</span>, <span style="color: #0000ff;">&quot;Shoks TL 2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	listaTenis.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Tenis<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">42</span>, <span style="color: #0000ff;">&quot;Adidas&quot;</span>, <span style="color: #0000ff;">&quot;Microbounce&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	serializaListaTenis<span style="color: #009900;">&#40;</span>listaTenis, <span style="color: #0000ff;">&quot;D:<span style="color: #000099; font-weight: bold;">\\</span>serializados.dat&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span> listaRecuperada <span style="color: #339933;">=</span> deserializaListaTenis<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;D:<span style="color: #000099; font-weight: bold;">\\</span>serializados.dat&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Tenis t <span style="color: #339933;">:</span> listaRecuperada<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Uma lista de Tenis foi criada e foram adicionados dois objetos. Depois foi chamado um método <strong>serializaListaTenis</strong> que vai ser responsável por serializar a lista e salvá-la no arquivo informado no segundo parâmetro.<br />
Logo depois é criada uma nova lista que recebe o retorno do método <strong>deserializaListaTenis </strong>cuja função é recuperar a lista do arquivo passado por parâmetro.<br />
Por fim a lista que foi recuperada é percorrida e os objetos são exibidos no console.</p>
<p>Vamos ao método que serializa a lista então:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> serializaListaTenis<span style="color: #009900;">&#40;</span>ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span> listaTenis, <span style="color: #003399;">String</span> arquivo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">FileOutputStream</span> arq <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">ObjectOutputStream</span> out <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//arquivo no qual os dados vao ser gravados</span>
		arq <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileOutputStream</span><span style="color: #009900;">&#40;</span>arquivo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//objeto que vai escrever os dados</span>
		out <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ObjectOutputStream</span><span style="color: #009900;">&#40;</span>arq<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//escreve todos os dados</span>
		out.<span style="color: #006633;">writeObject</span><span style="color: #009900;">&#40;</span>listaTenis<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			arq.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			out.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Os comentários estão bem claros e o código é bem simples de entender. É definido um objeto que representa o arquivo no qual os dados vão ser gravados e um outro objeto que irá escrever os dados no arquivo. Por fim a lista é &#8220;escrita&#8221; no arquivo através do método writeObject do objeto ObjectOutputStream.</p>
<p>Não sei se você percebeu mas o que nós gravamos foi um objeto ArrayList que contém alguns objetos Tenis. Lembrando que para um objeto ser serializado ele deve implementar a interface Serializable, ou seja, a classe ArrayList deve implementar essa interface para poder ser gravada em disco também (e todos os objetos que a lista contém). Olhando na <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/ArrayList.html" target="_blank">documentação </a>da classe nós iremos encontrar:</p>
<dt><strong>All Implemented Interfaces:</strong></dt>
<dd><a title="interface in java.lang" href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Cloneable.html">Cloneable</a>, <a title="interface in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collection.html">Collection</a>, <a title="interface in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/List.html">List</a>, <a title="interface in java.util" href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/RandomAccess.html">RandomAccess</a>, <a title="interface in java.io" href="http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html">Serializable</a></dd>
<p><br/>A classe ArrayList já implementa a interface Serializable, por isso nós podemos guardar objetos ArrayList no disco (desde que todos os objetos que estejam na lista também implementem esta interface).</p>
<p>Vamos então ao método que recupera a lista do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span> deserializaListaTenis<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> arquivo<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">FileInputStream</span> arqLeitura <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">ObjectInputStream</span> in <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span> lista <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//arquivo onde estao os dados serializados</span>
		arqLeitura <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FileInputStream</span><span style="color: #009900;">&#40;</span>arquivo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//objeto que vai ler os dados do arquivo</span>
		in <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ObjectInputStream</span><span style="color: #009900;">&#40;</span>arqLeitura<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">//recupera os dados</span>
		lista <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ArrayList<span style="color: #339933;">&lt;</span>Tenis<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span> in.<span style="color: #006633;">readObject</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">ClassNotFoundException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">finally</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
			arqLeitura.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			in.<span style="color: #006633;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">IOException</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			ex.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">return</span> lista<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Assim como no método que serializa a lista, este também tem um objeto que representa o arquivo que vai ser lido e um objeto que lê os dados (deserializa). O código é completamente o inverso do outro: referencia o arquivo, cria um objeto que vai ler do arquivo, e recupera os dados.</p>
<p>Então é isso, serializar um objeto pode ser bem útil quando se precisa fazer algo rápido, algo que não compense o esforço de utilizar um banco de dados.</p>
<p>O projeto está disponível <a href="http://dl.dropbox.com/u/4918828/Serializacao.rar" target="_blank">aqui</a>. Sintam-se a vontade para baixar e testar.</p>
<p>[]s e até a próxima,<br />
Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes+-+http://tinyurl.com/23o6cs9&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;du=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;cn=Serializa%C3%A7%C3%A3o...%20funcionalidade%20bem%20interesante%20do%20Java%20%28e%20muitas%20outras%20linguagens%29.%0D%0A%0D%0AAfinal%2C%20o%20que%20%C3%A9%20a%20serializa%C3%A7%C3%A3o%3F%0D%0A%0D%0ASerializa%C3%A7%C3%A3o%20%C3%A9%20a%20t%C3%A9cnica%20que%20permite%20transformar%20objetos%20em%20bytes%2C%20e%20uma%20vez%20que%20eles%20s%C3%A3o%20bytes%2C%20eles%20podem%20ser%20salvos%20em%20disco%20ou%20enviados%20atrav%C3%A9s%20de%20um%20stream%20%28via%20" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;t=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;title=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;summary=Serializa%C3%A7%C3%A3o...%20funcionalidade%20bem%20interesante%20do%20Java%20%28e%20muitas%20outras%20linguagens%29.%0D%0A%0D%0AAfinal%2C%20o%20que%20%C3%A9%20a%20serializa%C3%A7%C3%A3o%3F%0D%0A%0D%0ASerializa%C3%A7%C3%A3o%20%C3%A9%20a%20t%C3%A9cnica%20que%20permite%20transformar%20objetos%20em%20bytes%2C%20e%20uma%20vez%20que%20eles%20s%C3%A3o%20bytes%2C%20eles%20podem%20ser%20salvos%20em%20disco%20ou%20enviados%20atrav%C3%A9s%20de%20um%20stream%20%28via%20&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;title=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;title=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;body=Link: http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Serializa%C3%A7%C3%A3o...%20funcionalidade%20bem%20interesante%20do%20Java%20%28e%20muitas%20outras%20linguagens%29.%0D%0A%0D%0AAfinal%2C%20o%20que%20%C3%A9%20a%20serializa%C3%A7%C3%A3o%3F%0D%0A%0D%0ASerializa%C3%A7%C3%A3o%20%C3%A9%20a%20t%C3%A9cnica%20que%20permite%20transformar%20objetos%20em%20bytes%2C%20e%20uma%20vez%20que%20eles%20s%C3%A3o%20bytes%2C%20eles%20podem%20ser%20salvos%20em%20disco%20ou%20enviados%20atrav%C3%A9s%20de%20um%20stream%20%28via%20" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;title=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;body=Link: http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Serializa%C3%A7%C3%A3o...%20funcionalidade%20bem%20interesante%20do%20Java%20%28e%20muitas%20outras%20linguagens%29.%0D%0A%0D%0AAfinal%2C%20o%20que%20%C3%A9%20a%20serializa%C3%A7%C3%A3o%3F%0D%0A%0D%0ASerializa%C3%A7%C3%A3o%20%C3%A9%20a%20t%C3%A9cnica%20que%20permite%20transformar%20objetos%20em%20bytes%2C%20e%20uma%20vez%20que%20eles%20s%C3%A3o%20bytes%2C%20eles%20podem%20ser%20salvos%20em%20disco%20ou%20enviados%20atrav%C3%A9s%20de%20um%20stream%20%28via%20" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fserializacao-transformando-objetos-em-bytes%2F&amp;t=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;body=Link: http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Serializa%C3%A7%C3%A3o...%20funcionalidade%20bem%20interesante%20do%20Java%20%28e%20muitas%20outras%20linguagens%29.%0D%0A%0D%0AAfinal%2C%20o%20que%20%C3%A9%20a%20serializa%C3%A7%C3%A3o%3F%0D%0A%0D%0ASerializa%C3%A7%C3%A3o%20%C3%A9%20a%20t%C3%A9cnica%20que%20permite%20transformar%20objetos%20em%20bytes%2C%20e%20uma%20vez%20que%20eles%20s%C3%A3o%20bytes%2C%20eles%20podem%20ser%20salvos%20em%20disco%20ou%20enviados%20atrav%C3%A9s%20de%20um%20stream%20%28via%20" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/&amp;n=Serializa%C3%A7%C3%A3o+-+Transformando+Objetos+em+Bytes&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=135&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/serializacao-transformando-objetos-em-bytes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Annotations: O que &#233;, pra que serve?</title>
		<link>http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/</link>
		<comments>http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 14:33:01 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/</guid>
		<description><![CDATA[Annotations… recurso interessante. 
Sempre tive a curiosidade de saber como funcionavam, então fui perguntar pro Google.      Pretendo demonstrar aqui o que eu aprendi nas minhas pesquisas.
Annotations são… advinhem… anotações! É um jeito que você tem de fazer alguma marcação em um atributo, método, classe, entre outros.
Elas sempre devem ser digitadas [...]]]></description>
			<content:encoded><![CDATA[<p>Annotations… recurso interessante. </p>
<p>Sempre tive a curiosidade de saber como funcionavam, então fui perguntar pro Google. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />     <br />Pretendo demonstrar aqui o que eu aprendi nas minhas pesquisas.</p>
<p>Annotations são… advinhem… anotações! É um jeito que você tem de fazer alguma marcação em um atributo, método, classe, entre outros.</p>
<p>Elas sempre devem ser digitadas antes do objeto que você queira anotar (método, atributo…) e o nome das anotações são sempre precedidos de @ (arroba). Ex:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@MinhaAnotacao
<span style="color: #000000; font-weight: bold;">class</span> MinhaClasse<span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>
  <br />Até ai tudo bem, mas você deve estar se perguntando: “Pra que diabos eu vou usar isso? Pra que ficar enfeitando meu código?”. Calma. Tudo tem seu propósito.</p>
<p><span id="more-136"></span></p>
<p>Para poder trabalhar com as anotações, iremos utilizar a reflexão computacional, portanto sugiro que você leitor, leia meus posts antigos sobre Reflexão Computacional:</p>
<p><a href="http://www.javasimples.com.br/mundo-java/java-e-seus-espelhos-reflexo-computacional/" target="_blank">Java e seus Espelhos: Reflexão Computacional</a> e </p>
<p><a href="http://javasimples.wordpress.com/2010/02/08/reflexo-computacional-exemplo-prtico/" target="_blank">Reflexão Computacional: Exemplo Prático</a></p>
<p>Daqui pra frente vou supor que você entende e sabe utilizar a reflexão computacional…</p>
<hr />
<p align="center"><strong>Exemplo 1: Testando seus métodos</strong></p>
<hr />
<p>Então vamos lá: imagine que você é um bom programador com uma ótima noção de engenharia de software (o que realmente deve ser verdade neh… <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). Você sabe que uma fase importante no desenvolvimento de um software é a fase de testes. Porém você não gosta dos frameworks existentes para teste unitário (ou qualquer outro tipo), então você decide criar o seu próprio!</p>
<p>Para não ficar muito chato de utilizar, você decide que durante o desenvolvimento, todo método que possuir a anotação “@Testar” será testado pelo seu framework.</p>
<p>OK, com essa idéia na cabeça vamos criar a nossa anotação @Testar:</p>
<p>Testar.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
@Target<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">METHOD</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> Testar <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>Reparem que a nossa anotação deve ser anotada com <em>meta-anotações</em>. </p>
<p>A anotação @Retention(RetentionPolicy.RUNTIME) diz que a VM deve manter essas anotações em tempo de execução para podermos ler elas através da reflexão. Outras opções seriam: SOURCE e CLASS.</p>
<p>E a anotação @Target(ElementType.METHOD) indica que a nossa anotação só é aplicada a métodos. Outras opções seriam: FIELD, TYPE (classe e interface), PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, e PACKAGE.</p>
<p>Reparem que para declarar a nossa própria anotação, deve-se utilizar “@interface” antes do nome da anotação.</p>
<p>Pronto! Só isso! É assim que as anotações são criadas. Uma vez que já temos ela, vamos criar a classe que irá ser testada.</p>
<p>ClasseParaTestar.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ClasseParaTestar <span style="color: #009900;">&#123;</span>
&nbsp;
    @Testar
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo1<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Deu zebra!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Testar
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo2<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Testar
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo3<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo4<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Testar
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo5<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">RuntimeException</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Ixi maria... Erro!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo6<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Testar
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo7<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> metodo8<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>Como o propósito é só demonstrar as anotações, os métodos não fazem nada.</p>
<p>Beleza, agora os métodos que eu quero testar já estão “anotados”. Vamos criar a classe principal do nosso framework de testes.</p>
<p>Testador.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Testador <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> testar<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Class<span style="color: #339933;">&lt;?&gt;</span> classe <span style="color: #339933;">=</span> obj.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> passou <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> falhou <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;-------------Inicio dos Testes--------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Method</span> m <span style="color: #339933;">:</span> classe.<span style="color: #006633;">getDeclaredMethods</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>m.<span style="color: #006633;">isAnnotationPresent</span><span style="color: #009900;">&#40;</span>Testar.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Testando o método: &quot;</span><span style="color: #339933;">;</span> <span style="color: #339933;">+</span> m.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    m.<span style="color: #006633;">invoke</span><span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    passou<span style="color: #339933;">++;</span>
                    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; =&gt; passou!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Throwable</span> t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    falhou<span style="color: #339933;">++;</span>
                    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; =&gt; falhou! &quot;</span> <span style="color: #339933;">+</span> t.<span style="color: #006633;">getCause</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;---------------Fim dos Testes---------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Passaram: &quot;</span> <span style="color: #339933;">+</span> passou <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;, Falharam: &quot;</span> <span style="color: #339933;">+</span> falhou<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>Simples simples (caso você entenda a reflexão)… Tudo o que a gente faz é verificar se o método possui a anotação @Testar, caso ele possua, o método é invocado. Se não ocorrer nenhuma exceção, então ele passou no teste, caso contrário ele falhou.</p>
<p>Para utilizar o nossa pequeno (micro) framework, basta chamar o método estático passando um objeto da nossa classe para testar:<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">Testador.<span style="color: #006633;">testar</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ClasseParaTestar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p></p>
<p>Para o nosso exemplo, você deve obter a seguinte saída:<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">-------------Inicio dos Testes--------------
Testando o método: metodo1 =&gt; falhou! java.lang.RuntimeException: Deu zebra!
Testando o método: metodo2 =&gt; passou!
Testando o método: metodo3 =&gt; passou!
Testando o método: metodo5 =&gt; falhou! java.lang.RuntimeException: Ixi maria... Erro!
Testando o método: metodo7 =&gt; passou!
---------------Fim dos Testes---------------
Passaram: 3, Falharam: 2</pre></div></div>

<p>
  </p>
<p>Obs: Eu tirei este exemplo da <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html" target="_blank">documentação oficial</a>.</p>
</p>
<hr />
<p align="center"><strong>Exemplo 2: Validando seus atributos</strong></p>
<hr />
<p>Vamos criar uma classe genérica que faz a validação dos atributos de qualquer classe que você peça para ele validar. É claro que os atributos a serem validados devem possuir as anotações que nós vamos criar.</p>
<p>Vamos criar as nossas anotações então: @ValidarContemTexto e @ValidarPositivo.</p>
<p>ValidarPositivo.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
@Target<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">FIELD</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> ValidarPositivo <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>ValidarContemTexto.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">@Retention<span style="color: #009900;">&#40;</span>RetentionPolicy.<span style="color: #006633;">RUNTIME</span><span style="color: #009900;">&#41;</span>
@Target<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">FIELD</span><span style="color: #009900;">&#41;</span>
<span style="color: #000000; font-weight: bold;">public</span> @<span style="color: #000000; font-weight: bold;">interface</span> ValidarContemTexto <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">int</span> min<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">default</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>Opa! Apareceu uma coisa nova aqui. A anotação @ValidarContemTexto possui um atributo???</p>
<p>É isso mesmo! As anotações podem conter atributos para realizar alguma lógica durante o processamento delas. </p>
<p>No nosso caso, a anotação @ValidarContemTexto irá validar se o atributo que está decorado com a anotação possui pelo menos <strong>min</strong> caracteres (que por default é 1).</p>
<p>Reparem que a meta-anotação @Target é ElementType.FIELD, porque vamos utilizar essas anotações para decorar atributos.</p>
<p>A classe Usuario para o nosso teste será a seguinte:</p>
<p>Usuario.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #009900;">&#123;</span>
&nbsp;
    @ValidarContemTexto<span style="color: #009900;">&#40;</span>min <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> login<span style="color: #339933;">;</span>
&nbsp;
    @ValidarContemTexto<span style="color: #009900;">&#40;</span>min <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> senha<span style="color: #339933;">;</span>
&nbsp;
    @ValidarPositivo
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> nivel<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//Construtores, getters e setters</span>
    <span style="color: #666666; font-style: italic;">//...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O login deverá possuir pelo menos 10 caracteres, a senha deverá possuir pelo menos 20 caracteres (para garantir alguma segurança… hehehe) e o nível deverá ser um inteiro positivo maior ou igual a zero.</p>
<p>Vamos ver a classe responsável pela validação:</p>
<p>Validador.java<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Validador <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">boolean</span> validar<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> obj<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        Class<span style="color: #339933;">&lt;?&gt;</span> classe <span style="color: #339933;">=</span> obj.<span style="color: #006633;">getClass</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">boolean</span> ok <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Field</span> f <span style="color: #339933;">:</span> classe.<span style="color: #006633;">getDeclaredFields</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            f.<span style="color: #006633;">setAccessible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//Annotation @ValidarPositivo</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">isAnnotationPresent</span><span style="color: #009900;">&#40;</span>ValidarPositivo.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">int</span> num <span style="color: #339933;">=</span> <span style="color: #003399;">Integer</span>.<span style="color: #006633;">parseInt</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>num <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        ok <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                        <span style="color: #000000; font-weight: bold;">throw</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Exception</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Throwable</span> t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; deve ser um valor inteiro positivo.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">//Annotation @ValidarContemTexto</span>
            <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">isAnnotationPresent</span><span style="color: #009900;">&#40;</span>ValidarContemTexto.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                ValidarContemTexto anotacao <span style="color: #339933;">=</span> f.<span style="color: #006633;">getAnnotation</span><span style="color: #009900;">&#40;</span>ValidarContemTexto.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">String</span> texto <span style="color: #339933;">=</span> f.<span style="color: #006633;">get</span><span style="color: #009900;">&#40;</span>obj<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>texto.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> anotacao.<span style="color: #006633;">min</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        ok <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; deve possuir pelo menos &quot;</span> <span style="color: #339933;">+</span> anotacao.<span style="color: #006633;">min</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; caracteres.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Throwable</span> t<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>f.<span style="color: #006633;">getName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot;: &quot;</span> <span style="color: #339933;">+</span> t.<span style="color: #006633;">getCause</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000000; font-weight: bold;">return</span> ok<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>Quase igual ao exemplo anterior, porém nós percorremos os atributos (getDeclaredFields()) ao invés do métodos (getDeclaredMethods()).</p>
<p>Um if para cada anotação… nada muito novo. A única novidade aqui é a recuperação da anotação @ValidarContemTexto para poder acessar o valor que foi definido para o seu atributo <strong>min</strong>. Mas também não é nada de outro mundo.</p>
<p>O código a seguir cria 3 usuários e executa a validação com cada um deles: </p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">ArrayList<span style="color: #339933;">&lt;</span>usuario<span style="color: #339933;">&gt;</span> usuarios <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ArrayList<span style="color: #339933;">&lt;</span>usuario<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
usuarios.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Usuario<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;login&quot;</span>, <span style="color: #0000ff;">&quot;senha&quot;</span>, <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
usuarios.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Usuario<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;felipesaab&quot;</span>, <span style="color: #0000ff;">&quot;SaabRocks&quot;</span>, <span style="color: #339933;">-</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
usuarios.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Usuario<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;javasimples&quot;</span>, <span style="color: #0000ff;">&quot;javasimplesjavasimples&quot;</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Usuario u <span style="color: #339933;">:</span> usuarios<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Validando usuario: &quot;</span> <span style="color: #339933;">+</span> u.<span style="color: #006633;">getLogin</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>Validador.<span style="color: #006633;">validar</span><span style="color: #009900;">&#40;</span>u<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Usuário OK.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Corrija os erros.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p></p>
<p>O resultado será o seguinte:<br />
  </p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Validando usuario: login
login deve possuir pelo menos 10 caracteres.
senha deve possuir pelo menos 20 caracteres.
Corrija os erros.
&nbsp;
Validando usuario: felipesaab
senha deve possuir pelo menos 20 caracteres.
nivel deve ser um valor inteiro positivo.
Corrija os erros.
&nbsp;
Validando usuario: javasimples
Usuário OK.</pre></div></div>

<p>&#160;</p>
<p>Chegamos ao fim de mais um post aqui do Java Simples. Espero que tenham gostado, eu pelo menos achei esse assunto interessantíssimo.</p>
<p>Quem quiser pode pegar os arquivos que eu fiz e testei <a href="http://dl.dropbox.com/u/4918828/AppAnnotations.rar" target="_blank">aqui</a>.</p>
<p>[]s e até a próxima,<br />
  <br />Saab. </p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F+-+http://tinyurl.com/2axb3su&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;du=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;cn=Annotations%E2%80%A6%20recurso%20interessante.%20%20%20Sempre%20tive%20a%20curiosidade%20de%20saber%20como%20funcionavam%2C%20ent%C3%A3o%20fui%20perguntar%20pro%20Google.%20%3AD%20%20%20%20Pretendo%20demonstrar%20aqui%20o%20que%20eu%20aprendi%20nas%20minhas%20pesquisas.%20%20Annotations%20s%C3%A3o%E2%80%A6%20advinhem%E2%80%A6%20anota%C3%A7%C3%B5es%21%20%C3%89%20um%20jeito%20que%20voc%C3%AA%20tem%20de%20fazer%20alguma%20marca%C3%A7%C3%A3o%20em%20um%20" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;t=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;title=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;summary=Annotations%E2%80%A6%20recurso%20interessante.%20%20%20Sempre%20tive%20a%20curiosidade%20de%20saber%20como%20funcionavam%2C%20ent%C3%A3o%20fui%20perguntar%20pro%20Google.%20%3AD%20%20%20%20Pretendo%20demonstrar%20aqui%20o%20que%20eu%20aprendi%20nas%20minhas%20pesquisas.%20%20Annotations%20s%C3%A3o%E2%80%A6%20advinhem%E2%80%A6%20anota%C3%A7%C3%B5es%21%20%C3%89%20um%20jeito%20que%20voc%C3%AA%20tem%20de%20fazer%20alguma%20marca%C3%A7%C3%A3o%20em%20um%20&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;title=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;title=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Annotations%E2%80%A6%20recurso%20interessante.%20%20%20Sempre%20tive%20a%20curiosidade%20de%20saber%20como%20funcionavam%2C%20ent%C3%A3o%20fui%20perguntar%20pro%20Google.%20%3AD%20%20%20%20Pretendo%20demonstrar%20aqui%20o%20que%20eu%20aprendi%20nas%20minhas%20pesquisas.%20%20Annotations%20s%C3%A3o%E2%80%A6%20advinhem%E2%80%A6%20anota%C3%A7%C3%B5es%21%20%C3%89%20um%20jeito%20que%20voc%C3%AA%20tem%20de%20fazer%20alguma%20marca%C3%A7%C3%A3o%20em%20um%20" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;title=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Annotations%E2%80%A6%20recurso%20interessante.%20%20%20Sempre%20tive%20a%20curiosidade%20de%20saber%20como%20funcionavam%2C%20ent%C3%A3o%20fui%20perguntar%20pro%20Google.%20%3AD%20%20%20%20Pretendo%20demonstrar%20aqui%20o%20que%20eu%20aprendi%20nas%20minhas%20pesquisas.%20%20Annotations%20s%C3%A3o%E2%80%A6%20advinhem%E2%80%A6%20anota%C3%A7%C3%B5es%21%20%C3%89%20um%20jeito%20que%20voc%C3%AA%20tem%20de%20fazer%20alguma%20marca%C3%A7%C3%A3o%20em%20um%20" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fannotations-o-que-pra-que-serve%2F&amp;t=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Annotations%E2%80%A6%20recurso%20interessante.%20%20%20Sempre%20tive%20a%20curiosidade%20de%20saber%20como%20funcionavam%2C%20ent%C3%A3o%20fui%20perguntar%20pro%20Google.%20%3AD%20%20%20%20Pretendo%20demonstrar%20aqui%20o%20que%20eu%20aprendi%20nas%20minhas%20pesquisas.%20%20Annotations%20s%C3%A3o%E2%80%A6%20advinhem%E2%80%A6%20anota%C3%A7%C3%B5es%21%20%C3%89%20um%20jeito%20que%20voc%C3%AA%20tem%20de%20fazer%20alguma%20marca%C3%A7%C3%A3o%20em%20um%20" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/&amp;n=Annotations%3A+O+que+%26eacute%3B%2C+pra+que+serve%3F&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=136&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/annotations-o-que-pra-que-serve/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Internacionaliza&#231;&#227;o &#8211; Um software, v&#225;rios idiomas!</title>
		<link>http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/</link>
		<comments>http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 17:17:44 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[idiomas]]></category>
		<category><![CDATA[internacionalizacao]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[linguas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/</guid>
		<description><![CDATA[Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!).
Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram bem [...]]]></description>
			<content:encoded><![CDATA[<p>Tudo bem, eu admito. Esse nome é muito grande e chato de pronunciar (porém muito útil!).</p>
<p>Imagine que você desenvolveu um super software (em Java é claro…) para atender um determinado nicho de mercado, levou 1 ano da sua vida para fazer isso. Quando você começou a vendê-lo foi o maior sucesso, seus clientes falaram bem do seu software pra todo mundo. Cada dia apareciam mais clientes, maravilha!</p>
<p>Até que um certo dia um americano ouviu falar do seu software e diz que paga um preço 5x maior do que você está acostumado a cobrar, porém o software tem que ser totalmente em Inglês…</p>
<p>E agora José???? Vai copiar o projeto e sair mudando todas as strings? Boa sorte…</p>
<p>Se tivesse pensado nisso antes, você teria planejado melhor o seu software e teria utilizado as facilidades que o Java oferece para Internacionalizar seu programa.</p>
<p>Mais chega de história, vamos a algo um pouco mais prático. Vamos criar uma pequena aplicação apenas para demonstrar como é fácil e útil internacionalizar seu programa em Java.</p>
<p><span id="more-131"></span></p>
<p>Crie um novo projeto Java para Área de Trabalho no NetBeans e apague tudo que ele já cria. Crie 2 pacotes: internacionalizacao e internacionalizacao.linguas:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb.png" border="0" alt="image" width="226" height="128" /></a></p>
<p>Dentro do pacote internacionalizacao crie um JFrame e o deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image1.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb1.png" border="0" alt="image" width="205" height="150" /></a></p>
<p>Eu mudei os nomes dos JLabel’s e do JComboBox para:</p>
<ul>
<li>jL_Lingua</li>
<li>jL_Nome</li>
<li>jL_Telefone</li>
<li>jL_Email</li>
<li>jCB_Lingua</li>
</ul>
<p><br/><br />
Fique a vontade para nomear como achar melhor.</p>
<p>Essa vai ser a cara do nosso aplicativo. Quando o usuário selecionar uma língua no combobox, todos os JLabel’s e o título do JFrame vão mudar para a língua escolhida.</p>
<p>Como as coisas não caem do céu, as informações de cada idioma devem estar armazenadas em algum lugar. E esse lugar é um arquivo que vai ficar no pacote internacionalizacao.linguas. Um arquivo para cada idioma.</p>
<p>O nome dos arquivos devem serguir um padrão: <strong>&lt;nome*&gt;_&lt;idioma&gt;_&lt;país&gt;.properties<br />
</strong>O padrão pode variar um pouco pois existem alguns parâmetros opcionais, porém o que nos interessa é este mesmo.</p>
<p>* O nome de todos os arquivos devem ser iguais. Ex:</p>
<ul>
<li>Idioma_pt_BR</li>
<li>Idioma_en_US</li>
</ul>
<p><br/><br />
Sabendo disso, adicione 4 arquivos ao pacote internacionalizacao.linguas. Para adicioná-los clique com o botão direito no projeto e em Novo &gt; Outro. Selecione a categoria “Java” e o tipo de arquivo “Arquivo de Propriedade”.</p>
<p>Adicione os seguintes arquivos:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image2.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb2.png" border="0" alt="image" width="251" height="218" /></a></p>
<p>Eu dei o nome padrão de “Linguas” aos meus arquivos. Como já foi dito, cada arquivo é responsável por um idioma:</p>
<ul>
<li>Linguas_de_DE –&gt; Alemão</li>
<li>Linguas_en_US –&gt; Inglês</li>
<li>Linguas_fr_FR –&gt; Francês</li>
<li>Linguas_pt_BR –&gt; Português</li>
</ul>
<p><br/><br />
Segue o conteúdo de cada arquivo de Línguas:</p>
<p>Linguas_de_DE.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span> Internationalisierung  <span style="color: #339933;">-</span> EinfacheJava
lingua <span style="color: #339933;">=</span> Sprache
nome <span style="color: #339933;">=</span> <span style="color: #003399;">Name</span>
telefone <span style="color: #339933;">=</span> Telefon
email <span style="color: #339933;">=</span> E<span style="color: #339933;">-</span>Mail</pre></div></div>

<p>Linguas_en_US.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span> Internationalization <span style="color: #339933;">-</span> SimpleJava
lingua <span style="color: #339933;">=</span> Language
nome <span style="color: #339933;">=</span> <span style="color: #003399;">Name</span>
telefone <span style="color: #339933;">=</span> Phone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Linguas_fr_FR.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span>  Internationalisation <span style="color: #339933;">-</span> SimpleJava
lingua <span style="color: #339933;">=</span> Langue
nome <span style="color: #339933;">=</span> Nom
telefone <span style="color: #339933;">=</span> Téléphone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Linguas_pt_BR.properties</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">titulo <span style="color: #339933;">=</span>  Internacionalização <span style="color: #339933;">-</span> JavaSimples
lingua <span style="color: #339933;">=</span> Língua
nome <span style="color: #339933;">=</span> Nome
telefone <span style="color: #339933;">=</span> Telefone
email <span style="color: #339933;">=</span> Email</pre></div></div>

<p>Uma vez que os arquivos de idioma já contenham tudo o que vamos precisar, vamos atualizar o combobox. Mude a propriedade “model”  e adicione os seguintes itens:</p>
<ul>
<li>pt_BR</li>
<li>en_US</li>
<li>fr_FR</li>
<li>de_DE</li>
</ul>
<p><br/><br />
Agora só falta adicionar o evento que vai cuidar da mudança dos idiomas de acordo com a seleção do usuário. Adicione o seguinte código ao evento <strong>ActionPerfomed </strong>do jCB_Linguas:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> selecionado <span style="color: #339933;">=</span> jCB_Lingua.<span style="color: #006633;">getSelectedItem</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">split</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;_&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003399;">Locale</span>.<span style="color: #006633;">setDefault</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Locale</span><span style="color: #009900;">&#40;</span>selecionado<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>,selecionado<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
internacionaliza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O vetor de String “selecionado” recebe o item que o usuário selecionou, porém separado pelo _ (underscore). Ex: se o usuário selecionar “pt_BR” –&gt; “selecionado = {pt , BR}”.</p>
<p>Depois o Locale** default é setado para o que o usuário selecionou e é chamada a função <strong>internacionaliza()</strong>.</p>
<p>** <strong>A</strong> <code><strong>Locale</strong></code> <strong>object represents a specific geographical, political, or cultural region. </strong>Um objeto Locale representa uma região geográfica, política ou cultural específica. (de acordo com a <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Locale.html" target="_blank">Documentação</a>). Por default é a configuração do sistema operacional no qual a JVM foi instalada, ex: se o seu Windows é em português do Brasil, provavelmente sua Locale default será pt_BR.</p>
<p>Por fim, vamos ao código da função <strong>internacionaliza()</strong>, que é onde a mágica acontece:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> internacionaliza<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">Locale</span> locale <span style="color: #339933;">=</span> <span style="color: #003399;">Locale</span>.<span style="color: #006633;">getDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">ResourceBundle</span> palavras <span style="color: #339933;">=</span> <span style="color: #003399;">ResourceBundle</span>.<span style="color: #006633;">getBundle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;internacionalizacao.linguas.Linguas&quot;</span>, locale<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;titulo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Lingua.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;lingua&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Nome.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Telefone.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;telefone&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    jL_Email.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>palavras.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;email&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Primeiro é recuperado o Locale atual do computador e depois é instaciado o objeto <strong>palavras</strong> da classe <strong>ResouceBundle</strong> através do método estático <strong>ResourceBundle.getBundle(String,Locale)</strong>. O que este método faz é procurar o arquivo cujo nome seja igual o passado no primeiro parâmetro e o Locale seja igual ao passado no segundo parâmetro.</p>
<p>Ex: A execução desse método:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">ResourceBundle</span>.<span style="color: #006633;">getBundle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;internacionalizacao.linguas.Linguas&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Locale</span><span style="color: #009900;">&#40;</span>“pt”,”BR”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vai resultar na escolha do arquivo “Linguas_pt_BR.properties” do pacote “internacionalizacao.linguas”.</p>
<p>OBS Importante: É necessário passar o caminho completo do arquivo, ou seja: “pacote.NomePadrao”.</p>
<p>Agora que o objeto <strong>palavras</strong> contém a referência para todas as palavras daquele idioma, basta atribuí-las aos respectivos JLabels e ao título.<br />
<center><br />
<a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image3.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb3.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image4.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb4.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image5.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb5.png" border="0" alt="image" width="240" height="124" /></a> <a href="http://www.javasimples.com.br/wp-content/uploads/2010/03/image6.png"><img style="display: inline; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/03/image_thumb6.png" border="0" alt="image" width="240" height="126" /></a><br />
</center><br />
Muito legal não?</p>
<p>Quem quiser pode baixar o projeto através desse <a href="http://dl.dropbox.com/u/4918828/Internacionalizacao.rar" target="_blank">link</a>.</p>
<p>É isso ai galera, qualquer dúvida é só deixar um comentário e prometo que respondo o mais rápido possível.</p>
<p>[]s,</p>
<p>Saab.</p>
<p>PS: Esse post também foi dica do Dang do <a href="http://www.programei.org" target="_blank">Programei.org</a>. Valew!</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21+-+http://tinyurl.com/2alzcwl&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;du=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;cn=Tudo%20bem%2C%20eu%20admito.%20Esse%20nome%20%C3%A9%20muito%20grande%20e%20chato%20de%20pronunciar%20%28por%C3%A9m%20muito%20%C3%BAtil%21%29.%0D%0A%0D%0AImagine%20que%20voc%C3%AA%20desenvolveu%20um%20super%20software%20%28em%20Java%20%C3%A9%20claro%E2%80%A6%29%20para%20atender%20um%20determinado%20nicho%20de%20mercado%2C%20levou%201%20ano%20da%20sua%20vida%20para%20fazer%20isso.%20Quando%20voc%C3%AA%20come%C3%A7ou%20a%20vend%C3%AA-lo%20foi%20o%20maior%20su" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;t=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;title=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;summary=Tudo%20bem%2C%20eu%20admito.%20Esse%20nome%20%C3%A9%20muito%20grande%20e%20chato%20de%20pronunciar%20%28por%C3%A9m%20muito%20%C3%BAtil%21%29.%0D%0A%0D%0AImagine%20que%20voc%C3%AA%20desenvolveu%20um%20super%20software%20%28em%20Java%20%C3%A9%20claro%E2%80%A6%29%20para%20atender%20um%20determinado%20nicho%20de%20mercado%2C%20levou%201%20ano%20da%20sua%20vida%20para%20fazer%20isso.%20Quando%20voc%C3%AA%20come%C3%A7ou%20a%20vend%C3%AA-lo%20foi%20o%20maior%20su&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;title=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;title=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tudo%20bem%2C%20eu%20admito.%20Esse%20nome%20%C3%A9%20muito%20grande%20e%20chato%20de%20pronunciar%20%28por%C3%A9m%20muito%20%C3%BAtil%21%29.%0D%0A%0D%0AImagine%20que%20voc%C3%AA%20desenvolveu%20um%20super%20software%20%28em%20Java%20%C3%A9%20claro%E2%80%A6%29%20para%20atender%20um%20determinado%20nicho%20de%20mercado%2C%20levou%201%20ano%20da%20sua%20vida%20para%20fazer%20isso.%20Quando%20voc%C3%AA%20come%C3%A7ou%20a%20vend%C3%AA-lo%20foi%20o%20maior%20su" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;title=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tudo%20bem%2C%20eu%20admito.%20Esse%20nome%20%C3%A9%20muito%20grande%20e%20chato%20de%20pronunciar%20%28por%C3%A9m%20muito%20%C3%BAtil%21%29.%0D%0A%0D%0AImagine%20que%20voc%C3%AA%20desenvolveu%20um%20super%20software%20%28em%20Java%20%C3%A9%20claro%E2%80%A6%29%20para%20atender%20um%20determinado%20nicho%20de%20mercado%2C%20levou%201%20ano%20da%20sua%20vida%20para%20fazer%20isso.%20Quando%20voc%C3%AA%20come%C3%A7ou%20a%20vend%C3%AA-lo%20foi%20o%20maior%20su" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Finternacionalizao-um-software-vrios-idiomas%2F&amp;t=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;body=Link: http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tudo%20bem%2C%20eu%20admito.%20Esse%20nome%20%C3%A9%20muito%20grande%20e%20chato%20de%20pronunciar%20%28por%C3%A9m%20muito%20%C3%BAtil%21%29.%0D%0A%0D%0AImagine%20que%20voc%C3%AA%20desenvolveu%20um%20super%20software%20%28em%20Java%20%C3%A9%20claro%E2%80%A6%29%20para%20atender%20um%20determinado%20nicho%20de%20mercado%2C%20levou%201%20ano%20da%20sua%20vida%20para%20fazer%20isso.%20Quando%20voc%C3%AA%20come%C3%A7ou%20a%20vend%C3%AA-lo%20foi%20o%20maior%20su" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/&amp;n=Internacionaliza%26ccedil%3B%26atilde%3Bo+%26ndash%3B+Um+software%2C+v%26aacute%3Brios+idiomas%21&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=131&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/internacionalizao-um-software-vrios-idiomas/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Robot ? O Que &#233; isso?</title>
		<link>http://www.javasimples.com.br/mundo-java/robot-o-que-isso/</link>
		<comments>http://www.javasimples.com.br/mundo-java/robot-o-que-isso/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 01:47:04 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[automacao]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/robot-o-que-isso/</guid>
		<description><![CDATA[Tempo é um troço foda… Só falta… nunca tem sobrando…
Depois de muito tempo sem um post, aqui estamos nós.
Hoje a gente vai desvendar a classe Robot, muito útil para testes automáticos, criação de bots e outros.
Em resumo, a classe Robot simula eventos do teclado, mouse e outros.
É tudo muito fácil, vamos ao código:


try &#123;
	Robot robot [...]]]></description>
			<content:encoded><![CDATA[<p>Tempo é um troço foda… Só falta… nunca tem sobrando…<br />
Depois de muito tempo sem um post, aqui estamos nós.</p>
<p>Hoje a gente vai desvendar a classe Robot, muito útil para testes automáticos, criação de bots e outros.</p>
<p>Em resumo, a classe Robot simula eventos do teclado, mouse e outros.</p>
<p>É tudo muito fácil, vamos ao código:</p>
<p><span id="more-110"></span></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">Robot</span> robot <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Robot</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_J</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_V</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_SPACE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_S</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_I</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_M</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_P</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_L</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_E</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_S</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para testar esse código basta executar o aplicativo e alternar para um editor de texto qualquer (em menos de 1 segundo).</p>
<p>Tudo o que esse código faz é criar um novo objeto da classe Robot, esperar por um segundo (pra dar tempo de alternar para um editor de texto)  e simular o pressionamento de algumas teclas.</p>
<p>Um efeito bem legal é colocar um delay entre cada uma das teclas. Isso faz parecer que as teclas estão sendo digitas. Segue o código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">Robot</span> robot <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Robot</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_J</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_V</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_A</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_SPACE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_S</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_I</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_M</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_P</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_L</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_E</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	robot.<span style="color: #006633;">keyPress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_S</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe Robot permite a simulação de eventos do mouse também:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">Robot</span> robot <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Robot</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    robot.<span style="color: #006633;">mouseMove</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1100</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    robot.<span style="color: #006633;">delay</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    robot.<span style="color: #006633;">mousePress</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">InputEvent</span>.<span style="color: #006633;">BUTTON1_MASK</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span><span style="color: #003399;">Exception</span> ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O código acima apenas coloca o mouse na posição 1100,10 da tela e simula um clique do botão esquerdo.</p>
<p>Post curto pra um assunto de fácil entendimento. Espero que ninguem encontre dificuldades quando estiver utilizando essa classe tão legal.</p>
<p>[]s,</p>
<p>Saab.</p>
<p>PS: Esse post foi uma dica do Dang do <a href="http://www.programei.org" target="_blank">Programei.org</a>. Valew fera!</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Robot+%3F+O+Que+%26eacute%3B+isso%3F+-+http://tinyurl.com/28xqwoo&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;du=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;cn=Tempo%20%C3%A9%20um%20tro%C3%A7o%20foda%E2%80%A6%20S%C3%B3%20falta%E2%80%A6%20nunca%20tem%20sobrando%E2%80%A6%0D%0ADepois%20de%20muito%20tempo%20sem%20um%20post%2C%20aqui%20estamos%20n%C3%B3s.%0D%0A%0D%0AHoje%20a%20gente%20vai%20desvendar%20a%20classe%20Robot%2C%20muito%20%C3%BAtil%20para%20testes%20autom%C3%A1ticos%2C%20cria%C3%A7%C3%A3o%20de%20bots%20e%20outros.%0D%0A%0D%0AEm%20resumo%2C%20a%20classe%20Robot%20simula%20eventos%20do%20teclado%2C%20mouse%20e%20outros." rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;t=Robot+%3F+O+Que+%26eacute%3B+isso%3F" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;title=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;summary=Tempo%20%C3%A9%20um%20tro%C3%A7o%20foda%E2%80%A6%20S%C3%B3%20falta%E2%80%A6%20nunca%20tem%20sobrando%E2%80%A6%0D%0ADepois%20de%20muito%20tempo%20sem%20um%20post%2C%20aqui%20estamos%20n%C3%B3s.%0D%0A%0D%0AHoje%20a%20gente%20vai%20desvendar%20a%20classe%20Robot%2C%20muito%20%C3%BAtil%20para%20testes%20autom%C3%A1ticos%2C%20cria%C3%A7%C3%A3o%20de%20bots%20e%20outros.%0D%0A%0D%0AEm%20resumo%2C%20a%20classe%20Robot%20simula%20eventos%20do%20teclado%2C%20mouse%20e%20outros.&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/robot-o-que-isso/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;title=Robot+%3F+O+Que+%26eacute%3B+isso%3F" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;title=Robot+%3F+O+Que+%26eacute%3B+isso%3F" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/robot-o-que-isso/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tempo%20%C3%A9%20um%20tro%C3%A7o%20foda%E2%80%A6%20S%C3%B3%20falta%E2%80%A6%20nunca%20tem%20sobrando%E2%80%A6%0D%0ADepois%20de%20muito%20tempo%20sem%20um%20post%2C%20aqui%20estamos%20n%C3%B3s.%0D%0A%0D%0AHoje%20a%20gente%20vai%20desvendar%20a%20classe%20Robot%2C%20muito%20%C3%BAtil%20para%20testes%20autom%C3%A1ticos%2C%20cria%C3%A7%C3%A3o%20de%20bots%20e%20outros.%0D%0A%0D%0AEm%20resumo%2C%20a%20classe%20Robot%20simula%20eventos%20do%20teclado%2C%20mouse%20e%20outros." rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;title=Robot+%3F+O+Que+%26eacute%3B+isso%3F" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/robot-o-que-isso/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tempo%20%C3%A9%20um%20tro%C3%A7o%20foda%E2%80%A6%20S%C3%B3%20falta%E2%80%A6%20nunca%20tem%20sobrando%E2%80%A6%0D%0ADepois%20de%20muito%20tempo%20sem%20um%20post%2C%20aqui%20estamos%20n%C3%B3s.%0D%0A%0D%0AHoje%20a%20gente%20vai%20desvendar%20a%20classe%20Robot%2C%20muito%20%C3%BAtil%20para%20testes%20autom%C3%A1ticos%2C%20cria%C3%A7%C3%A3o%20de%20bots%20e%20outros.%0D%0A%0D%0AEm%20resumo%2C%20a%20classe%20Robot%20simula%20eventos%20do%20teclado%2C%20mouse%20e%20outros." rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Frobot-o-que-isso%2F&amp;t=Robot+%3F+O+Que+%26eacute%3B+isso%3F" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;body=Link: http://www.javasimples.com.br/mundo-java/robot-o-que-isso/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Tempo%20%C3%A9%20um%20tro%C3%A7o%20foda%E2%80%A6%20S%C3%B3%20falta%E2%80%A6%20nunca%20tem%20sobrando%E2%80%A6%0D%0ADepois%20de%20muito%20tempo%20sem%20um%20post%2C%20aqui%20estamos%20n%C3%B3s.%0D%0A%0D%0AHoje%20a%20gente%20vai%20desvendar%20a%20classe%20Robot%2C%20muito%20%C3%BAtil%20para%20testes%20autom%C3%A1ticos%2C%20cria%C3%A7%C3%A3o%20de%20bots%20e%20outros.%0D%0A%0D%0AEm%20resumo%2C%20a%20classe%20Robot%20simula%20eventos%20do%20teclado%2C%20mouse%20e%20outros." rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/robot-o-que-isso/&amp;n=Robot+%3F+O+Que+%26eacute%3B+isso%3F&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=110&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/robot-o-que-isso/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Criando um cliente para Twitter &#8211; Parte 2</title>
		<link>http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/</link>
		<comments>http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:02:23 +0000</pubDate>
		<dc:creator>Saab</dc:creator>
				<category><![CDATA[Mundo Java]]></category>
		<category><![CDATA[acessar]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[integrar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/</guid>
		<description><![CDATA[Foi mal a demora pessoal, o tempo tah foda aqui…
Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: Criando um cliente para Twitter – Parte 1.
Segunda parte do nosso tutorialzinho!
Agora iremos criar:

Um formulário para realizar o login (sem utilizar o OAuth)
Um formulário para:

mostrar os ultimos tweets da timeline
possibilitar o envio [...]]]></description>
			<content:encoded><![CDATA[<p>Foi mal a demora pessoal, o tempo tah foda aqui…</p>
<p>Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: <a href="http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-1/" target="_blank">Criando um cliente para Twitter – Parte 1</a>.</p>
<p>Segunda parte do nosso tutorialzinho!<br />
Agora iremos criar:</p>
<ul>
<li>Um formulário para realizar o login (sem utilizar o OAuth)</li>
<li>Um formulário para:
<ul>
<li>mostrar os ultimos tweets da timeline</li>
<li>possibilitar o envio de um tweet</li>
</ul>
</li>
</ul>
<p><span id="more-102"></span></p>
<p>Vamos lá então, crie um novo projeto no NetBeans e adicione o twitter4j nas bibliotecas.<br />
Adicione um JFrame e deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb.png" border="0" alt="image" width="195" height="180" /></a></p>
<p>O campo para usuário é um JTextField com o nome jTF_Nome.<br />
O campo para a senha é um JPasswordField com o nome jPF_Senha.<br />
O JButton não tem nada de mais, só coloquei o passarinho ai pra ficar mais bonitinho. ^^</p>
<p>O JPasswordField é mais do que um JTextField que mascara as letras, existem todo um esquema de segurança por trás deste componente. Tanto que a recuperação do que foi digitado é um pouco mais chatinha: ao invés de uma String, é recuperado um objeto do tipo char[]. Como o login é exige duas strings (usuário e senha) como parâmetro, fiz um método para realizar a conversão.<br />
Vamos ao código do botão responsável pelo login:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> senha <span style="color: #339933;">=</span> jPF_Senha.<span style="color: #006633;">getPassword</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> senha.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		str <span style="color: #339933;">+=</span> senha<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> EfetuarLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">String</span> usu <span style="color: #339933;">=</span> jTF_Usuario.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> senha <span style="color: #339933;">=</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		Twitter t <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>usu, senha<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		User u <span style="color: #339933;">=</span> t.<span style="color: #006633;">verifyCredentials</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399;">Principal</span> p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>t,u<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setLocationRelativeTo</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dispose</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStatusCode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">401</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Usuário e/ou senha inválidos!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nada muito novo em relação ao post anterior. É criado um novo objeto Twitter com os dados que foram digitados. Para garantir que os dados estão corretos existe o método <strong>verifyCredentials()</strong> que em caso de sucesso retorna um objeto <strong>User</strong> que referencia o usuário que acabou de se logar.  Se estiver tudo certo então chama o próximo JFrame (Principal) e retira o formulário de login da memória (uma vez que ele não será mais usado).</p>
<p>Em caso de falha, é jogada uma exceção do tipo <strong>TwitterException</strong>. Se o status code da exceção for 401 significa que o usuário e/ou senha estão errados, daí é só avisar o usuário.</p>
<p>O próximo formulário é um pouco mais complexo… Adicione um novo JFrame ao projeto e chame de Principal.java. Deixe ele parecido como este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image1.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb1.png" border="0" alt="image" width="432" height="688" /></a></p>
<p>Segue a lista dos componentes:</p>
<p>JLabel jL_Foto –&gt; tamanho 48&#215;48</p>
<p>JTextArea jTA_Status –&gt; pra digitar a mensagem</p>
<p>JLabel jL_Restantes –&gt; vai indicar quantos caracteres ainda restam</p>
<p>JScrollPane jScrollPane2 –&gt; a borda foi mudada para ficar mais legal como esta na figura (Ultimos Tweets)</p>
<p>JPanel jP_Tweets –&gt; este panel vai receber os ultimos tweets, ele fica dentro do jScrollPane2. O layout desse panel é do tipo BoxLayout (layout de caixa)  com a propriedade eixo setada em Y.</p>
<p>Vamos lá então! Exibindo os últimos tweets:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #000000; font-weight: bold;">extends</span> javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Twitter t<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> User eu<span style="color: #339933;">;</span>
    <span style="color: #003399;">Image</span> foto<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/** Creates new form Principal */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>Twitter t, User eu<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">t</span> <span style="color: #339933;">=</span> t<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">eu</span> <span style="color: #339933;">=</span> eu<span style="color: #339933;">;</span>
        initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">foto</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>eu.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jL_Foto.<span style="color: #006633;">setIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span>foto<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JPanel</span> pane<span style="color: #339933;">;</span>
            <span style="color: #003399;">JLabel</span> novaFoto<span style="color: #339933;">;</span>
            <span style="color: #003399;">JTextArea</span> msg<span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
            jP_Tweets.<span style="color: #006633;">removeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Status s <span style="color: #339933;">:</span> t.<span style="color: #006633;">getFriendsTimeline</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                i<span style="color: #339933;">++;</span>
                <span style="color: #666666; font-style: italic;">//cria o panel</span>
                pane <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JPanel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FlowLayout</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">FlowLayout</span>.<span style="color: #006633;">LEFT</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setBorder</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">LineBorder</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">black</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">370</span>, <span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o label com a foto</span>
                novaFoto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o textarea com o texto</span>
                msg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextArea</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">27</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setEditable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setLineWrap</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>novaFoto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                jP_Tweets.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>pane<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro recuperando a timeline: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe possui 3 atributos que eu considero completamente autoexplicativos mas vamos dar uma pequena passada por eles:</p>
<ul>
<li>Twitter t –&gt; velho conhecido nosso não é…</li>
<li>User eu –&gt; para guardar as informações de quem está logado</li>
<li>Image foto –&gt; para guardar a imagem de perfil do usuário</li>
</ul>
<p>Logo quando o formulário é criado, o método <strong>recuperarDados()</strong> é chamado, a foto do usuário é carregada e então o método <strong>carregaTimeline()</strong> é invocado.</p>
<p>O <strong>carregaTimeline()</strong> cria dinamicamente a lista com os ultimos tweets. O código está todo comentado e está bem fácil de entender.</p>
<p>Vale ressaltar que para a lista ficar certinha (um tweet por linha) o layout do panel jP_Tweets deve ser BoxLayout!</p>
<p>Vamos para a próxima parte então: Atualizando o status.</p>
<p>Mude a propriedade lineWrap do jTA_Status para true, com isso a linha não vai ultrapassar os limites do text area e o texto vai ficar dentro dela.</p>
<p>Para fazer a contagem dos caracteres restantes vamos utilizar de uma funcionalidade bem interessante do text area: O evento caretUpdate é chamado toda vez que uma tecla é adiciona ou deletada, sendo assim, adicione o seguinte código neste evento caretUpdate do jTA_Status:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusCaretUpdate<span style="color: #009900;">&#40;</span>javax.<span style="color: #006633;">swing</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">CaretEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    jL_Restantes.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">140</span> <span style="color: #339933;">-</span> jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Próximos passos: não deixar o usuário digitar mais do que 140 caracteres e postar a mensagem.</p>
<p>O que vamos fazer é o seguinte: se o usuário for digitar o 141º a gente simplesmente cancela ele. Podemos tratar as duas funções no evento keyTyped do jTA_Status.</p>
<p>Segue o código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusKeyTyped<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">KeyEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	evt.<span style="color: #006633;">setKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_CLEAR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evt.<span style="color: #006633;">getKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_ENTER</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	    t.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTA_Status.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	    carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro atualizando o status: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Muito tranquilo. Pouco código e muitas funcionalidades. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Agora nosso cliente já está com uma cara bem legal. Eu implementei mais algumas frescurinhas e ele ficou assim:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image2.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb2.png" border="0" alt="image" width="445" height="724" /></a></p>
<p>Ali embaixo da minha foto tem um label que mostra um pedacinho do ultimo post… embaixo da lista mostra quantos tweets foram carregados… enfim, um monte de frescura que eu nem mostrei aqui…</p>
<p>Quem quiser conferir o projeto completo pode pegar <a href="http://dl.dropbox.com/u/4918828/TwitterClienteParte2.rar" target="_blank">aqui</a>.</p>
<p>Sugestões para quem quiser aperfeiçoar um pouco mais esse humilde cliente de Twitter:</p>
<ul>
<li>De 5 em 5 minutos recarregar a lista de tweets. Dica: utilizando Threads fica facinho.</li>
<li>Ao clicar na foto da pessoa, uma janela abre com as informações da pessoa.</li>
<li>Adicionar um botão para retwittar a mensagem.</li>
</ul>
<p>Quem quiser tem como brincar bastante com isso ai…</p>
<p>Valew pessoal,</p>
<p>[]s e até a próxima.</p>
<p>Saab.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=%23JavaSimples+Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2+-+http://tinyurl.com/28demst&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-orkut">
			<a href="http://promote.orkut.com/preview?nt=orkut.com&amp;tt=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;du=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;cn=Foi%20mal%20a%20demora%20pessoal%2C%20o%20tempo%20tah%20foda%20aqui%E2%80%A6%0D%0A%0D%0ASe%20voc%C3%AA%20caiu%20de%20paraquedas%20nesse%20post%20eu%20sugiro%20a%20leitura%20do%20post%20anterior%3A%20Criando%20um%20cliente%20para%20Twitter%20%E2%80%93%20Parte%201.%0D%0A%0D%0ASegunda%20parte%20do%20nosso%20tutorialzinho%21%0D%0AAgora%20iremos%20criar%3A%0D%0A%0D%0A%09Um%20formul%C3%A1rio%20para%20realizar%20o%20login%20%28sem%20utilizar%20o%20OAuth" rel="nofollow" class="external" title="Promover noOrkut">Promover noOrkut</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;t=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2" rel="nofollow" class="external" title="Compartilhar noFacebook">Compartilhar noFacebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;title=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;summary=Foi%20mal%20a%20demora%20pessoal%2C%20o%20tempo%20tah%20foda%20aqui%E2%80%A6%0D%0A%0D%0ASe%20voc%C3%AA%20caiu%20de%20paraquedas%20nesse%20post%20eu%20sugiro%20a%20leitura%20do%20post%20anterior%3A%20Criando%20um%20cliente%20para%20Twitter%20%E2%80%93%20Parte%201.%0D%0A%0D%0ASegunda%20parte%20do%20nosso%20tutorialzinho%21%0D%0AAgora%20iremos%20criar%3A%0D%0A%0D%0A%09Um%20formul%C3%A1rio%20para%20realizar%20o%20login%20%28sem%20utilizar%20o%20OAuth&amp;source=Java Simples" rel="nofollow" class="external" title="Compartilhar noLinkedIn">Compartilhar noLinkedIn</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/feed" rel="nofollow" class="external" title="Acompanhar comentários deste artigo?">Acompanhar comentários deste artigo?</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;title=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2" rel="nofollow" class="external" title="Compartilhar nodel.icio.us">Compartilhar nodel.icio.us</a>
		</li>
		<li class="shr-googlebookmarks">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;title=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2" rel="nofollow" class="external" title="Adicionar aoGoogle Bookmarks">Adicionar aoGoogle Bookmarks</a>
		</li>
		<li class="shr-gmail">
			<a href="https://mail.google.com/mail/?ui=2&amp;view=cm&amp;fs=1&amp;tf=1&amp;su=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;body=Link: http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Foi%20mal%20a%20demora%20pessoal%2C%20o%20tempo%20tah%20foda%20aqui%E2%80%A6%0D%0A%0D%0ASe%20voc%C3%AA%20caiu%20de%20paraquedas%20nesse%20post%20eu%20sugiro%20a%20leitura%20do%20post%20anterior%3A%20Criando%20um%20cliente%20para%20Twitter%20%E2%80%93%20Parte%201.%0D%0A%0D%0ASegunda%20parte%20do%20nosso%20tutorialzinho%21%0D%0AAgora%20iremos%20criar%3A%0D%0A%0D%0A%09Um%20formul%C3%A1rio%20para%20realizar%20o%20login%20%28sem%20utilizar%20o%20OAuth" rel="nofollow" class="external" title="Email this via Gmail">Email this via Gmail</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;title=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-hotmail">
			<a href="http://mail.live.com/?rru=compose?subject=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;body=Link: http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Foi%20mal%20a%20demora%20pessoal%2C%20o%20tempo%20tah%20foda%20aqui%E2%80%A6%0D%0A%0D%0ASe%20voc%C3%AA%20caiu%20de%20paraquedas%20nesse%20post%20eu%20sugiro%20a%20leitura%20do%20post%20anterior%3A%20Criando%20um%20cliente%20para%20Twitter%20%E2%80%93%20Parte%201.%0D%0A%0D%0ASegunda%20parte%20do%20nosso%20tutorialzinho%21%0D%0AAgora%20iremos%20criar%3A%0D%0A%0D%0A%09Um%20formul%C3%A1rio%20para%20realizar%20o%20login%20%28sem%20utilizar%20o%20OAuth" rel="nofollow" class="external" title="Email this via Hotmail">Email this via Hotmail</a>
		</li>
		<li class="shr-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.javasimples.com.br%2Fmundo-java%2Fcriando-um-cliente-para-twitter-parte-2%2F&amp;t=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2" rel="nofollow" class="external" title="Compartilhar noTumblr">Compartilhar noTumblr</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/" rel="nofollow" class="external" title="Compartilhar noTechnorati">Compartilhar noTechnorati</a>
		</li>
		<li class="shr-yahoomail">
			<a href="http://compose.mail.yahoo.com/?Subject=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;body=Link: http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/ (sent via shareaholic)%0D%0A%0D%0A----%0D%0A Foi%20mal%20a%20demora%20pessoal%2C%20o%20tempo%20tah%20foda%20aqui%E2%80%A6%0D%0A%0D%0ASe%20voc%C3%AA%20caiu%20de%20paraquedas%20nesse%20post%20eu%20sugiro%20a%20leitura%20do%20post%20anterior%3A%20Criando%20um%20cliente%20para%20Twitter%20%E2%80%93%20Parte%201.%0D%0A%0D%0ASegunda%20parte%20do%20nosso%20tutorialzinho%21%0D%0AAgora%20iremos%20criar%3A%0D%0A%0D%0A%09Um%20formul%C3%A1rio%20para%20realizar%20o%20login%20%28sem%20utilizar%20o%20OAuth" rel="nofollow" class="external" title="Email this via Yahoo! Mail">Email this via Yahoo! Mail</a>
		</li>
		<li class="shr-blogger">
			<a href="http://www.blogger.com/blog_this.pyra?t&amp;u=http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/&amp;n=Criando+um+cliente+para+Twitter+%26ndash%3B+Parte+2&amp;pli=1" rel="nofollow" class="external" title="Postar noBlogger">Postar noBlogger</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

<img src="http://www.javasimples.com.br/?ak_action=api_record_view&id=102&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
