Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SpringMvc Annotations for DAO interface and DAO implementation

I would like to know if I am annotating these classes correctly, since I am new to the annotations:

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;   

    }
}
like image 311
devdar Avatar asked Sep 30 '12 02:09

devdar


Video Answer


1 Answers

This answer should clear things up a bit: What's the difference between @Component, @Repository & @Service annotations in Spring?

Other things you should know :

  • Your entities and interfaces don't need any annotation. Indeed, @Component and other derived annotations just mean that you are declaring a Spring bean on the fly. For example,

    @Component
    public class MyComponent { ... }
    

    will by default add a bean named "myComponent" in Spring's context. Spring beans are singletons by default, and represent real instantiated object.
    So it has no sense to declare entities or interfaces as Spring beans.

  • Managers are semantically the same as Services, so you should rather annotate them with @Service.

Here's how your code should be :

// No annotation
public class Country {

and

// No annotation
public interface CountryDAO {

and

@Repository
public class JdbcCountryDAO extends JdbcDaoSupport implements CountryDAO {

and

// No annotation
public interface CountryManagerIFace extends Serializable{

and

@Service
public class CountryManager implements CountryManagerIFace{

    @Autowired
    private CountryDAO countryDao;

Note : I rarely use @Component in my code, as @Controller (presentation layer), @Service (service layer) and @Repository (dao layer) cover my main Spring bean needs.

like image 162
Jerome Dalbert Avatar answered Oct 05 '22 23:10

Jerome Dalbert