public UserServiceImpl() {
System.out.println(“— UserServiceImpl 构造方法”);
}
@Autowired
public void setUserDao(UserDao userDao) {
System.out.println(“— setUserDao 属性注入方法”);
this.userDao = userDao;
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(“— afterPropertiesSet 方法”);
}
public void initMethod() {
System.out.println(“— initMethod 方法”);
}
@Override
public void test() {
}
}
配置 bean,生成 UserServiceImpl 类的 bean,交由 Spring 容器管理。
@Configuration
public class UserServiceImplConfig {
// 通过 initMethod 属性指定初始化方法
@Bean(initMethod = “initMethod”)
public UserServiceImpl userServiceImpl() {
return new UserServiceImpl();
}
}
启动服务,会在启动日志看到如下日志,表示在 bean 按指定顺序创建和初始化了。
— UserServiceImpl 构造方法
— setUserDao 属性注入方法
— afterPropertiesSet 方法
— initMethod 方法
====================================================================
使用实现 DisposableBean 接口,重写 destroy 方法的方式,同样也会让代码和 Spring 紧耦合,如果你不想代码和 Spring 耦合,那不推荐使用此种方式。
另外一种方式是,配置 bean 的时候通过配置 destroyMethod 指定 bean 的销毁方法,它也是在 bean 被销毁时需要执行的方法。
第一种方式是将 bean 强制转换成 DisposableBean 接口类型,然后直接调用 destroy 方法,速度更快,第二种方式是通过反射来执行 destroyMethod 方法,效率相对较低。
destroy 和 destroyMethod 可以同时存在,但是 destroy 方法是在 destroyMethod 方法之前执行的。
我们将上面 UserServiceImpl 类修改如下,使之实现 接口,重写 destroy 方法。
public class UserServiceImpl implements UserService, InitializingBean, DisposableBean {
private UserDao userDao;
public