zoukankan      html  css  js  c++  java
  • spring配置详述与springboot

    1. ApplicationContext接口是BeanFactory的一个扩展,,除了DI服务,ApplicationContext还提供事务、AOP服务、国际化的消息源以及应用程序事件处理等。
    2. <context:component-scan>标记告诉Spring扫描代码,从而找到使用了@Component、@Controller、@Serivice、@Repository注解的注入bean,以及支持在指定包下使用@Autowired、@Inject、@Resource注解的bean。
    3. @Configuration注解用于指定class为配置类,可以在该类型使用@Bean注解方法;
    4. @ComponentScanning是一个java类配置注解,与<context:component-scan>标记同理;
    5. @Resource注解是jdk本身自带的,支持name参数以获得更精细的DI要求;@Autowired是spring提供的注解,@Autowired使用反射来填充需要依赖项;
    6. @Service是@Component的一个特例,@Service表明注解的类正在向应用程序中的其他层提供业务服务;
    7. 方法查找(Lookup Method Injection)@Lookup注入的工作方式是让单例声明一个查找方法,该方法返回非单例Bean的一个实例。spring使用CGlib来生成一个目标类的子类,该类将动态地重写该方法;
    8. 方法替换通过实现MethodReplacer接口,替换目标类的任何方法,实际上使用的也是CGlib方式;
    9. @Autowired配合@Qualifier注解指定注入的具体bean名;
    10. Bean命名规则:为bean设置了id,则bean名称为id,如果没有设置id,spring会查找name属性(第一个值,name中可以设置多个名称),如果id与name属性都没有设置,会将类名作为名称;
    11. 如果项目中有两个不同名称的bean,但是使用同一个类,例如foo与superfoo,如果想把引用superfoo的改为foo,可以删除superfoo的bean,然后在foo的name后面增加一个superfoo的别名;
    12. spring默认情况下所有的bean都是单例的,可以使用scope设置prototype(原型模式)等;
    13. prototype(原型模式)表示spring在每次应用程序请求bean实例时实例化一个新的bean实例;
    14. 什么时候选择使用单例:
      1. 没有状态的共享对象;
      2. 只有可读状态的共享对象;
      3. 具有共享状态的共享对象;
      4. 具有可写状态的高通量对象(应用程序大量创建对象,可以使用同步方式控制写状态)
    15. 实例bean作用域
      1. 单例作用域
      2. 原型作用域
      3. 请求作用域
      4. 会话作用域(http请求带有会话作用的bean)
      5. 全局会话作用域
      6. 线程作用域
      7. 自定义作用域
    16. bean通过xml配置时需要按照注入顺序配置,防止一个bean未初始化的情况下,被另一个bean进行了注入;
    17. 如果bean在xml配置时未按照注入顺序配置,可以通过配置depends-on标志进行注入依赖bean(通过depends-on属性指定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好),需要注意使是一个Abean依赖于另一个Bbean,需要让Abean实现ApplicationContextAware接口;
    18. ApplicationContextAware接口提供了一个特性有spring的接口,Spring容器会检测容器中的所有Bean,如果发现Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传给该方法,同时赋给该类对象的applicationContext实例变量,因此接下来可以通过该applicationContext实例变量来访问容器本身,这个过程是在调用bean的构造函数之后完成的。
    19. bean自动装配,可以在xml中配置自动装配模式 autowire="byName"
      1. byName模式
      2. byType
      3. 构造函数
      4. 默认模式
    20. 针对一个类有2个bean配置的情况,可以在一个bean配置中增加primary标志,设置优先使用哪个bean(同一个类型不同名称的);例如一个A类,xml中配置了两个bean,分别的beanname为a1,a2,但是使用时注入的代码为:private A a;这种情况默认使用byType,发现有两个符合注入条件,使用primary就可以解决这种情况;
    21. 针对20出现情况,也可以使用@Autowired配合@Qualifier注解指定注入的具体bean名;
    22. xml中配置init-method,指定类初始化时执行的方法
    23. InitializingBean接口,实现该接口的bean可以获得spring已经完成配置的通知,即可以获得spring中所有bean信息,可以设置bean默认值或者检测bean配置是否正确;
    24. @Postconstruct注解应用于方法上,类似于init-method
    25. @Bean(initMethod="init")同理xml中配置init-method
    26. Bean加载顺序
      1. 首先调用构造函数来创建bean
      2. 注意依赖项(调动setter)
      3. 现在bean已经存在并且提供了依赖项,预初始化的BeanPostProcessor基础机构bean将被查询,以查询看它们是否想从创建的bean中调用任务东西(@Postconstruct注解)
      4. 实现InitializingBean接口的afterPropertiesSet()方法在注入依赖项后立即执行;
      5. 最后执行init-method属性,这是因为它是bean的实际初始化方法;
    27. BeanNameAware接口,实现该接口的类会实现setBeanName方法,通过该方法可以获得beanName值,在打印日志时可以实现beanName的配置值作为日志的一部分,方便查询;
    28. ApplicationContextAware接口,通过实现该接口,可以获得丢配置bean的ApplicationContext实例的应用,创建此接口的原因是为了允许bean在应用程序中访问spring的ApplicationContext,例如通过getBean方法获得指定名称的bean对象。
    29. FactoryBean接口,该接口充当不能使用标准spring语义创建和管理的对象的适配器;FactoryBean可以用在事务代理以及JNDI上下文自动获得资源。
  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/use-D/p/12634039.html
Copyright © 2011-2022 走看看