import org.springframework.stereotype.Service;
public class BookServiceImpl implements BookService{
public void init(){
// init-method..
}
@Override
public void buyBook() {
//Implementation..
}
}
The declaration for this service in a Spring context file would have been along these lines:
<bean name="bookService" class="org.bk.samples.types.BookServiceImpl" init-method="init"/>
the init-method contains the method name to be invoked post instantiation and after all the properties of the beans have been wired in.
The annotation equivalent of this is using @javax.annotation.PostConstruct annotation, which is part of the Common Annotations for Java.
So the equivalent annotation based annotation would be the following.
import javax.annotation.PostConstruct;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService{
@PostConstruct
public void init(){
}
@Override
public void buyBook() {
//Implementation..
}
}
I believe that this may not be entirely true due to the ordering of Spring lifecycle events - PostConstruct is called from a Pre-Initialization BeanPostProcessor whereas the init-method and afterPropertiesSet() aren't (come between pre- and post-initialization). A useful nuiance if one is strugling with accessing the Application Context from within the @PostConstruct method and finding the injected/referenced collaborators have an annoyingly null application context.
ReplyDelete