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;
}
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With