Spring Boot(三)Spring4扩展分析(一)

 2019-11-02 21:06  阅读(1117)
文章分类:Spring boot

1. 将Bean加入到Spring容器里(让Spring 进行管理),有2钟方法

1.使用 一些指定的注解 @Component , @Controller , @Service , @Repository 等
2.创建一个 配置类 ,在类里 创建一个 返回 想要加载的 Bean 的方法
1.给配置类加 注解 @Configuration
2.创建一个 返回 User.class Bean的方法
3.给 该方法 加注解 @Bean
@Configuration
public class MyConfig {
@Bean
public User getUsre(){
return new User();
}
}

2. 获取 Bean

1.通过类名 获取

  1. 通过 类.class
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(“com.aa.b”);
    context.getBean(User.class)
  2. 通过 类的名称 获取 ,如 获取 User.class
    1.AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(“com.aa.b”);
    context.getBean(“user”)
  3. 类的名称要小写
    2.通过 配置类中 方法的名称 ,来获取
    3.通过类型 获得Bean 时
  4. Spring容器里 只有 一个该类型的Bean
    可以用 context.getBean(User.class) 来获得
  5. Spring容器里 只有 多个该类型的Bean
    只能用 context.getBeansOfType(User.class) 来获得,否则 报错

3. 将 ApplicationContext 注入 有3种方法

1.直接用 @Autowired 或 @Resource 或 @Inject 来注解
1.在一个Bean类里, 添加 ApplicationContext 属性
2.用 @Autowired 或 @Resource 或 @Inject 来注解 ApplicationContext 属性
2.实现 ApplicationContextAware
1.让一个 Bean类 实现 ApplicationContextAware 接口
2.在这个Bean类里 添加 ApplicationContext 属性
3.在重写 方法 setApplicationContext 中 加 this.applicationContext=applicationContext

private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext=applicationContext;

}
3.通过构造方法
1.在一个Bean类里, 添加 ApplicationContext 属性
2.构建 该Bean的带 ApplicationContext 参数 的构造函数,在构造函数 中加 this.pplicationContext=applicationContext
private ApplicationContext applicationContext;
public Bank(ApplicationContext applicationContext){
this.pplicationContext=applicationContext;
}
—–
3.Spring4.3新特性
1.构造函数只能有一个,如果有多个,则必须有一个无参的构造函数.此时,Spring会调用无参的构造函数
2.构造函数的参数,都必须都要Spring容器里

4. 实现 BeanPostProcessor 接口 ,Bean的后置处理器 –对指定的Bean做一些处理,比如返回该对象的代理对象

1.创建一个新的类 ,实现 BeanPostProcessor 接口
2.在该类里 重写 2个方法 postProcessBeforeInitialization() ,postProcessAfterInitialization()
1.postProcessBeforeInitialization
1.方法, 是在 Bean依赖装配(属性设置完)完成之后触发
2.这里可以对指定的Bean做一些处理,比如返回该对象的代理对象
2.postProcessAfterInitialization 方法, 是在bean init方法执行之后触发的

5. 将 ApplicationContext 注入 第2种方法中实现的原理

1.在一个类中 实现一个Spring 特定的接口 BeanPostProcessor ,来对 ApplicationContext 做一些处理
2.执行BeanPostProcessor 接口 中的 postProcessBeforeInitialization()方法。

  1. postProcessBeforeInitialization(Object bean,String beanName)方法,中加一个if判断
  2. private Object postProcessBeforeInitialization(Object bean,String beanName){
    if(bean instanceof User){
    return new ApplicationContext();
    }
    }
  3. ApplicationContext 是User Bean中的属性 。Spring容器刚 注入 User Bean 后,
    将 执行 postProcessBeforeInitialization(),在该方法里 返回一个新创建的ApplicationContext 也就是将ApplicationContext注入Spring容器。

来源:http://ddrv.cn

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Spring Boot(三)Spring4扩展分析(一)

相关推荐