众所周知Spring框架主要的一个功能是IOC容器,IOC就是控制反转将本来需要我们手动实例化bean的过程,交给了Spring去完成。让Spring帮我们去实例化和维护bean。如果我们要在bean实例完成后需要执行自定义初始化方法怎么办呢?在Spring框架中提供了两种方式一种是在XML配置bean时指定init-method,另外一种方式是bean实现InitializingBean接口。接下来我们就看看Spring是怎么通过InitializingBean帮我们完成bean的自定初始化过程。
首先看下InitializingBean接口的定义,接口中包含afterPropertiesSet方法。
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
我们自定义一个接口HelloService,这个接口继承InitializingBean接口,定义如下:
public interface HelloService extends InitializingBean {
int sayHello();
}
编写一个HelloService的实现类:
@Service
public class HelloServiceImpl implements HelloService{
private Logger logger = LoggerFactory.getLogger(getClass());
public String serviceName;
@Override
public int sayHello() {
System.out.println(serviceName);
return 1;
}
@Override
public void afterPropertiesSet() throws Exception {
logger.info("helloservice 执行初始化");
this.serviceName = "helloSevice";
}
}
启动tomcat容器,查看打印日志,可以看到HelloServiceImpl在创建实例后自动调用了afterPropertiesSet方法,完成了自定义的初始化流程。
在Spring框架中这个执行过程是什么样的呢,Spring创建bean