2012-09-30 26 views
6

Me gustaría saber si estoy Anotación de estas clases correctamente, ya que soy nuevo en las anotaciones:SpringMVC Anotaciones para la interfaz DAO y aplicación DAO

Country.java

@Component 
public class Country { 

private int countryId; 
private String countryName; 
private String countryCode; 

/** 
* No args constructor 
*/ 
public Country() { 
} 

/** 
* @param countryId 
* @param countryName 
* @param countryCode 
*/ 
public Country(int countryId, String countryName, String countryCode) { 
    this.countryId = countryId; 
    this.countryName = countryName; 
    this.countryCode = countryCode; 
} 
    //getters and setters 

} 

CountryDAO .java

@Repository 
public interface CountryDAO { 

    public List<Country> getCountryList(); 

    public void saveCountry(Country country); 

    public void updateCountry(Country country); 
} 

JdbcCountryDAO.java

@Component 
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO{ 

    private final Logger logger = Logger.getLogger(getClass()); 

    @Autowired 
    public List<Country> getCountryList() { 
     int countryId = 6; 
     String countryCode = "AI"; 
     logger.debug("In getCountryList()"); 
     String sql = "SELECT * FROM TBLCOUNTRY WHERE countryId = ? AND countryCode = ?"; 
     logger.debug("Executing getCountryList String "+sql); 

     Object[] parameters = new Object[] {countryId, countryCode}; 

     logger.info(sql); 

     //List<Country> countryList = getJdbcTemplate().query(sql,new CountryMapper()); 
     List<Country> countryList = getJdbcTemplate().query(sql, parameters,new CountryMapper()); 
     return countryList; 
    } 

CountryManagerIFace.java

@Repository 
public interface CountryManagerIFace extends Serializable{ 

    public void saveCountry(Country country); 

    public List<Country> getCountries(); 
} 

CountryManager.java

@Component 
public class CountryManager implements CountryManagerIFace{ 

    @Autowired 
    private CountryDAO countryDao; 

    public void saveCountry(Country country) { 
     countryDao.saveCountry(country); 

    } 

    public List<Country> getCountries() { 
     return countryDao.getCountryList(); 
    } 


    public void setCountryDao(CountryDAO countryDao){ 

     this.countryDao = countryDao; 

    } 
} 
+0

El captador autocableado no se ve correctamente –

+1

El país no debe ser anotado como un Componente si se trata de una Entidad o VO. Puede dejarlo como un simple frijol no anotado. –

+1

debe anotar las clases de implementación y no tiene que preocuparse por las interfaces. También evite el componente a menos que no haya una mejor opción, más semántica. A primera vista, parece que CountryManager es más bien un @Service. –

Respuesta

18

Esta respuesta debe aclarar un poco las cosas: What's the difference between @Component, @Repository & @Service annotations in Spring?

Otras cosas que debe saber:

  • Sus entidades e interfaces no necesitan ninguna anotación. De hecho, @Component y otras anotaciones derivadas solo significan que está declarando un Spring Bean sobre la marcha. Por ejemplo,

    @Component 
    public class MyComponent { ... } 
    

    agregará de manera predeterminada un bean llamado "myComponent" en el contexto de Spring. Los beans de primavera son singleton por defecto y representan un objeto real instanciado.
    Por lo tanto, no tiene sentido declarar entidades o interfaces como Spring beans.

  • Los administradores son semánticamente los mismos que los Servicios, por lo que debería anotarlos con @Service.

Así es como el código debe ser:

// No annotation 
public class Country { 

y

// No annotation 
public interface CountryDAO { 

y

@Repository 
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO { 

y

// No annotation 
public interface CountryManagerIFace extends Serializable{ 

y

@Service 
public class CountryManager implements CountryManagerIFace{ 

    @Autowired 
    private CountryDAO countryDao; 

Nota: rara vez usar @Component en mi código, como @Controller (capa de presentación), @Service (capa de servicio) y @Repository (DAO capa superior) mis principales necesidades de frijol de primavera .

+1

muchas gracias esto fue bien explicado – devdar