经典面试题:怎么把一个对象交给spring

2,076 阅读1分钟

怎么把一个对象交给spring

注意是把对象交给spring,就是这个对象是由我们自己创建的,为什么需要把对象交给spring管理

  • 1.通过@Bean
    @Bean
    public A a(){
        A a = new A();
        return a;
    }
  • 2.通过BeanFactory注册单例对象
  AnnotationConfigApplicationContext applicationContext = 
  new AnnotationConfigApplicationContext();
  applicationContext.getBeanFactory().registerSingleton("",new A());

但是这个做法有个弊端,就是这个做法要么再spring初始化之前,要么再spring初始化之后。如果再spring初始化之前使用这个方式,那么这个别的bean就无法依赖这个的bean,但是如果在spring初始化之前,那么这个bean就无法依赖spring中的其他bean。

  • 3.通过FactoryBean Mybatis就是通过这个方式+动态代理来实现接口被转化为对象,让这个对象让spring管理的。一般做法就是实现FactoryBean这个接口,然后再getObject这个方法返回我们自己实现的对象。

问题:

  • 1.为什么会有需要我们创建对象然后交给spring管理的

就像Mybatis的dao是一个接口,需要通过动态代理去创建一个对象,这个对象需要开发人员去创建,因为在动态代理的代理类需要我们自定义一些逻辑,所以需要我们创建对象,交给spring管理是为了其他spring管理的对象能够依赖到dao。

  • 2.为什么@Component 这个注解不是把一个对象交给spring管理

把一个对象交给spring管理,意思这个对象是我们创建的,然后 @Component是直接把这个类交给spring管理,包括这个类创建对象都是由spring控制的。