2012-09-30 17 views
6

chciałbym wiedzieć, czy jestem opisywanie tych klas poprawnie, ponieważ jestem nowy w adnotacji:SpringMvc Adnotacje dla interfejsu DAO i realizacji 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

Automatycznie pobierany getter z pewnością nie wygląda dobrze –

+1

kraj nie powinien być oznaczony jako składnik, jeśli jest to Podmiot lub VO. Możesz zostawić go jako zwykłą, niezaanalizowaną fasolę. –

+1

powinieneś opisywać klasy implementacji i nie musisz się martwić o interfejsy. Unikaj także komponentu, chyba że nie ma lepszej, bardziej semantycznej opcji. W skrócie wygląda na to, że CountryManager jest bardziej prawdopodobne @Service. –

Odpowiedz

18

Ta odpowiedź powinna wyczyścić rzeczy się trochę: What's the difference between @Component, @Repository & @Service annotations in Spring?

Inne rzeczy, które warto wiedzieć:

  • Twoje podmiotów i interfejsy nie wymagają żadnej adnotacji. Rzeczywiście, @Component i inne pochodne adnotacje oznaczają tylko, że deklarujesz Spring bean w locie. Na przykład:

    @Component 
    public class MyComponent { ... } 
    

    domyślnie doda komponent bean o nazwie "myComponent" w kontekście Spring. Sprężyna ziaren to domyślnie singletony i reprezentuje obiekt rzeczywisty.
    Dlatego nie ma sensu deklarować elementów ani interfejsów jako fasoli Spring.

  • Menedżerowie są semantycznie tacy sami jak Usługi, więc powinieneś raczej opisywać je za pomocą @Service.

Oto jak Twój kod powinien być:

// No annotation 
public class Country { 

i

// No annotation 
public interface CountryDAO { 

i

@Repository 
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO { 

i

// No annotation 
public interface CountryManagerIFace extends Serializable{ 

i

@Service 
public class CountryManager implements CountryManagerIFace{ 

    @Autowired 
    private CountryDAO countryDao; 

Uwaga: ja rzadko korzystają @Component w moim kodu, jak @Controller (warstwa prezentacji), @Service (warstwa sieci) i @Repository (DAO warstwy) obejmują moje główne potrzeby Wiosna fasoli .

+1

dziękuję bardzo bardzo dobrze to wyjaśniono – devdar