笔记 -- Spring By 韩顺平

Spring

  • 在spring2.5中,是有applicationContext.xml 配置文件的,名字可以随意取,在工作项目中,FcoApiServletApplicationContextConfig 类进行配置。
  • 在容器文件中配置Bean(service/dao/domain/action/数据源),bean元素的作用是,当我们spring框架加载的时候。spring就会自动创建一个bean对象,并放入内存
  • 用到java反射机制 class.forName(“com.coupang…”)
  • IOC(Inverse Of Controll) 控制反转: 就是把创建对象和维护对象的关系的权利从程序转移到spring的容器(applicationContext.xml)
  • DI(dependency inject) 依赖注入: 实际上和ioc是一个概念,spring设计者认为DI更准确表示spring核心。(惠普两个哥们提出的)
  • bean的scope
  • singleton : 单例 默认
    prototype : 原型
    request : 一次性请求有效(java web开发中)
    session : session级有效(java web开发中)
    global-session : 在web中spring容器applicationContext一致
    

  • singleton 当你new applicationContext是会默认帮你创建一个,而prototype不会,prototype在每次getBean是创建对象,每次创建的对象还不一样。因为singleton已经定下来了就创建一个对象,所以会事先创建。
  • 三种获取applicationContext的方式
  • 1. ClassPathXmlApplicationContext -> 通过类路径
    2. FileSystemXmlApplicationContext -> 通过文件路径(绝对路径)
    3. XmlWebApplicationContext -> 从web系统中加载,tomcat启动时就会
    

  • 也可以使用注解的方式
  • 比如说 @PostConstruct 相当于 <bean init-method="" />
           @PreDestroy 相当于 <bean destory-method="myDestory()" /> 
    

  • 自动装配 Autowiring modes
  • 有五种模式:byName/ byType/ constructor/ autodetect/ default/ no
    韩老师的观点,能不用就不用,除非明确指定要用,因为没有直接set的清晰
    

  • 在spring2.5中 通过配置来启用注解
  • 题外话

  • 学习框架最重要的就是学会各个配置。
  • 当年的structs 是管理web层的,接管jsp/action/表单等,主要体现出mvc的数据输入,数据的处理,数据的显示分离。
  • 面试题

  • 从applicationContext应用中获取bean 和 在beanFactory 容器中获取bean 的区别?
  •     如果使用applicationContext。则配置的bean是singleton不管你用不用,都被实例化,(prototype不会)好处是可以预先加载,坏处是消耗内存,一般不在移动设备项目中使用
    
        如果是beanFactory,则当你实例化该对象的时候,配置的bean不会马上被实例化,延迟加载所有的bean, 当你使用的时候才被实例,好处是节约内存,坏处是速度慢。
    
        规定: 一般没要求就用applicationContext。(90%)
    

  • bean的生命周期 (Applicationcontext)
  • 1. 实例化,当我们的程序加载beans.xml文件是就开始实例化,把我们的bean(前提是scope=sinlgton)实例化到内存。可以用构造函数来证明。
    2. 设置属性,调用set方法设置属性
    3. 调用BeanNameAware接口的setBeanName()方法,用法:实现BeanNameAware接口,重载setBeanName方法有个args的参数为bean的name。
    4. 调用BeanFactoryAware接口的setBeanFactory()方法,用法同上,方法参数是beanFactory
    5. 调用ApplicationContextAware接口的setApplicationContext方法,参数是ApplicationContext对象
    6. 调用BeanPostProcessor接口(后置处理器)的两个方法,不过用法与上面三个不同。正确用法是新建一个类去实现此接口,然后再配置文件中配置成bean。神奇的是每个bean创建是都会自动调用BeanPostProcessor接口对的两个方法,像filter的感觉。此步骤是调用**before**方法,第九步是调用**after**方法。
    7. 调用initialBean的afterPropertiesSet()方法,用法同3,4,5
    8. 调用定制的初始化方法,比如在配置文件中<bean initial-method="init()" />,则init()方法就被调用.
    9. 调用6的**after**方法。
    10. bean 可以正常使用了。。。。。
    当容器关闭时:
    11. 容器关闭,调用DisposableBean接口的destory()方法,用方法同3,4,5
    12. 调用定制的销毁方法 <bean destory-method="myDestory()" />
    
    小结: 在实际开发中往往没用到这么多,一般是 1->2->6->9->10->11
    
    思考,如果是BeanFactory方式来获取,是否一样
    答案:5,6,9 没有。
    

  • AOP
  • 创建通知的五种类型

    通知类型 接口 描述
    Around org.aopalliance.intercept.MethodInterceptor 拦截对目标方法调用
    Before Org.springFramework.aop.MethodBeforeDevice 在目标方法调用前调用
    After Org.springFramework.aop.AfterReturningAdvice 在目标方法调用后调用
    Throws Org.springFramework.aop.ThrowAdvice 在目标方法抛出异常时调用

    猜你喜欢

    转载自blog.csdn.net/zhaorubinsujia/article/details/80932677