Java后端07(Spring未完成)

打印 上一主题 下一主题

主题 937|帖子 937|积分 2811

Spring

​        涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。
Spring配置文件文件头
  1. [/code][size=4]IOC 控制反转 ---- 将创建对象的权力由开发者交 给 Spring(缓解对象和对象之间的耦合度)[/size]
  2. ​        在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(spring中所有的对象都是从实例工厂中自动创建,涉及到简单工厂模式)
  3. [size=3]IOC底层原理[/size]
  4. [list=1]
  5. [*]xml解析(负责读取配置文件中 Bean 的相关信息)
  6. [*]简单工厂模式(借助 BeanFactory 完成对象的实例化和返回)
  7. [*]反射(不使用 new 创建对象的根本原因)
  8. [/list][size=3]简单工厂模式[/size]
  9. 优点:
  10. [list=1]
  11. [*]设计与实现分离(开发者不需要关心对象是如何创建出来的)
  12. [*]如果要拓展业务,并不会影响之前的业务,只需要拓展子类即可
  13. [/list][size=3]IOC容器的两种实现方式[/size]
  14. [list=1]
  15. [*]BeanFactory:是Spring内部使用的接口,不建议给开发人员使用,该容器加载配置文件时,并不会创建响应对象,当开发者尝试获取对象的时候,才会创建对象(类似懒汉模式,具有延迟加载的特性)
  16. [*]ApplicationContext:BeanFactory的子接口,一般由开发人员使用,该容器在加载配置文件的时候,就会创建对象(类似饿汉模式,不会出现并发安全问题,线程安全)
  17. [/list][size=4]DI 依赖注入 ---- 在你配置好 bean 的情况下,由 Spring 帮你完成对象的赋值[/size]
  18. 优点:
  19. [list=1]
  20. [*]实现了接口和实现的分离
  21. [*]组件化的思想,分离关注点,使用接口时,不再关注实现
  22. [/list][size=4]Spring 的 bean 管理[/size]
  23. [size=3]⭐Bean的声明周期[/size]
  24. [list=1]
  25. [*]常规五步声明周期
  26. ​        通过构造器创建 bean 实例 => 通过反射调用 setter 方法完成属性赋值 => 调用 bean 的初始化方法 => 获取 bean 实例 => 当容器关闭的时候, 调用 bean 的销毁方法
  27. [*]
  28. [/list][size=3]bean创建(IOC)[/size]
  29. [list=1]
  30. [*]基于xml的配置方式
  31. 结构分析
  32. id 对象的唯一标识,通过 id 获取 bean 实例
  33. class 对象所属类的完整路径,用于提供给 spring 借助反射完成的对象创建
  34. scope 表示单/多实例模式
  35. [code]<bean id="dog" >
  36.     <property name="name" value="dog01"/>
  37.     <property name="type" value="dogType01"/>
  38. </bean>
  39. <bean id="dog" >
  40.     <constructor-arg name="name" value="dog01"/>
  41. </bean>
  42. <bean id="dog" >
  43.     <property name="name"><null/></property>
  44. </bean>
  45. <bean id="dog" >
  46.     <property name="name">
  47.         <value><![CDATA[(-.-)]]></value>
  48.     </property>
  49. </bean>
  50. <bean id="dog" >
  51.     <property name="name" value="dog01" />
  52.     <property name="type" value="type01" />
  53. </bean>
  54. <bean id="person" >
  55.     <property name="dog" ref="dog" />
  56. </bean>
  57. <bean id="person" >
  58.     <property name="dog">
  59.         <bean >
  60.             <property name="name" value="dog01" />
  61.             <property name="type" value="type01" />
  62.         </bean>
  63.     </property>
  64. </bean>
  65. <bean id="person" >
  66.     <property name="dog" ref="dog" />
  67.     <property name="dog.type" value="type01" />
  68.     <property name="dog.name" value="dog01" />
  69. </bean>
  70. <bean id="dog"  />
  71. <bean id="person" >
  72.     <property name="hobbiesArray">
  73.         <array>
  74.             <value>games</value>
  75.             <value>coding</value>
  76.         </array>
  77.     </property>
  78.     <property name="hobbiesList">
  79.         <list>
  80.             <value>games</value>
  81.             <value>coding</value>
  82.         </list>
  83.     </property>
  84.     <property name="hobbiesSet">
  85.         <set>
  86.             <value>games</value>
  87.             <value>coding</value>
  88.         </set>
  89.     </property>
  90.     <property name="hobbiesMap">
  91.         <map>
  92.             <entry key="games" value="游戏" />
  93.             <entry key="coding" value="编码" />
  94.         </map>
  95.     </property>
  96. </bean>
  97. <bean id="factoryBeanDemo"  />
复制代码
  • 基于注解方式
    属性值的注入(DI)


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
  • 回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    美食家大橙子

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表