博客
关于我
每日总结[1] 20191001 初识Spring//Beans/控制反转/依赖注入/Date转换
阅读量:320 次
发布时间:2019-03-04

本文共 2936 字,大约阅读时间需要 9 分钟。

(1)头脑风暴,把我能想到的写下来:

     开发需要高内聚,低耦合,可实现接口不要继承类。要降低类与类之间的依赖关系

     Spring是一种技术,是一种框架,是一个容器。
     容器的作用:管理生命周期。

[应用对象存在于Spring容器中,Spring容器负责创建对象,装配它们,配置它们并管理它们的生命周期。]

     需要新建Maven项目,Maven的作用:项目依赖管理工具。结构构造工具。

[Maven:构建工具/项目信息管理工具/依赖管理工具。]

     Maven中有pom.xml,在pom.xml中添加依赖,Maven可以在仓库中导入相应的jar包及依赖。
     在src-main-java-resource下新建applicationContext.xml文件,这个“应用上下文”就是Spring本身。(Spring装配wire bean的方法不只通过xml这一种。)
     在applicationContext.xml中进行配置。

<bean name= class></bean>

     当写下上述代码后,就相当于执行了new对象的操作。     Spring容器就会装配对象,因此,在该类中需要提供无参构造。 而通过 getBean即相当于调用了get方法。

     Java中的bean是一种特殊的Java类,需要有无参构造,getter和setter方法。

     这样,如果本来想在类A中创建类B的对象,可以在类A中:private B b;然后通过Spring框架构造bean,再用getBeans,获得类B的对象。原来类B控制着类A,现在,Spring来控制类与类之间的关系,所以叫控制反转(IOC)。

(2)第一次复习后的补充:

     类与类之间的关系:继承,组合,联合,
[改:继承,关联,依赖,聚合,组合。]
     如果想在类A中产生类B对象:

public class A{   private B b;b=new B();}class B{   ......}

这样会带来高耦合的问题,而如果是改成:

public class A {   public A(B b){   }}

通过传入构造器参数的方式将类B传入,
[没有自行创建对象。]
     就不会带来高耦合的问题。而且传入的B的实例可以是继承了B类的、实现了B接口的…
     通过构造器注入是依赖注入的一种方式。

[传入的类型是B,可以是一个接口,只有类实现了接口,具体是哪个类无关紧要,如果对象只通过接口,而不是具体的实现或是初始化过程来表明依赖关系,那么这种依赖关系会在对象本身不知情的情况下,用不同的具体实现进行替换。]
    
[Spring核心容器:Beans,Core,Context,Expression,Contextsupport]
*

     Spring容器是Spring框架的核心,核心组件:core、context、有了Spring容器,便可构造对象和其依赖关系,而不需要我们创建对象及其依赖。

[对象的依赖关系将由系统中负责协调各对象的第三方组件在创建对象时进行设定,对象无需自行创建或管理它们的依赖关系。依赖关系将被自动注入到需要它们的对象中去。]

[创建应用组件之间协作的行为称为装配 wiring 。Spring有多种装配bean的方式,采用XML是常见的一种。]

[Spring通过应用上下文applicationContext装载bean的定义并把它们组装起来。]

     在测试类中创建ClassPathContextXml类对象classpathcontextxml,访问类加载路径下的配置文件, [从类路径下的一个或多个XML配置文件中加载上下文定义,把应用上下文的定义文件作为类资源]

     类文件:target下的classes中。

[在基于XML的Spring配置中声明bean]

     当Spring读取到这个文件,通过这个根元素下的就可以调用该类的无参构造创建Bean对象,再通过classpathcontextxml对象的getbean方法即可获得对象。 这样就少了我们手动new的过程。

     在测试类中写:A a=classpathcontextxml.getbean(“a”);

[改:ClassPathXmlApplicationContext .getBean( )]

     其中如果不给bean赋id值,它是会自动通过类的全名 [改:全限定类名] 进行赋值的。

     实现给属性赋值:(不推荐使用构造器注入,因为如果构造方法的参数列表很长,需要对应,较麻烦。)

<bean id=“xxx” class="xxx.xxx"><property="name" value="jiajia"></bean>

是调用了该类的setter方法。

而实现类A中产生类B的对象:

<bean id="a" class="com.bit.A"><property name="B" ref="b"></bean><bean id="b" class="com.bit.B"></bean>

即可。

(3)补充:

     如果某个类有个属性是int类型的,可以在applicationaContext.xml中声明bean:

<bean id="c" class="com.bit.C"><property="intValue" value="123">

     这时在测试类中写

ClassPathXMLApplicationContext classpxac=new ....C c=classpxac.getBean("c");System.out.println(c.intValue)

     会输出123,而我们给property赋值时给的value是字符串类型的"123",说明字符串类型是可以转换成int类型的。
     有一种类型不能从字符串转换过来——Date类。因为不同人对于日期时间的格式定义是不同的。那么就需要我们自己写一个转换器继承PropertySupport类,覆写其setAsText方法。并在Spring中声明该bean。

[改:自己写的日期时间格式转换类需要继承PropertyEditorSupport类并覆写其setAsText方法。通过创建SimpleDateFormat对象,将日期时间的字符串形式作为构造方法的参数传入,并调用其parse方法,即可将字符串类型转换成Date类型。
]

[接下来,在Spring中声明bean:

  <bean id="dataConvert" class="org.springframework.beans.factory.config.CustomEditorConfigurer">     <property name="customEditors">             <map>                 <entry key="java.util.Date" value="com.bit.DateConvert"/>             </map>     </property>    </bean>

]

  • Spring中的Bean机制默认是单例的。
  • 还可以通过注解进行装配。

转载地址:http://tbjh.baihongyu.com/

你可能感兴趣的文章
IDEA出现问题:Received fatal alert: protocol_version 解决方案
查看>>
Airtest自动化测试 Docs airtest.core.android package
查看>>
JDK 内置的多线程协作工具类的使用场景
查看>>
Java 中哪些对象可以获取类对象
查看>>
11.2.6 时间值的小数秒
查看>>
Redis源码分析(七)--- zipmap压缩图
查看>>
自定义Hive Sql Job分析工具
查看>>
【MySQL】(九)触发器
查看>>
Oracle 11G环境配置
查看>>
【Python】(十二)IO 文件处理
查看>>
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
查看>>
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
查看>>
C语言的数值溢出问题(上)
查看>>
函数指针的典型应用-计算函数的定积分(矩形法思想)
查看>>
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
用 wxPython 打印你的 App
查看>>
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
查看>>
android:使用audiotrack 类播放wav文件
查看>>
vue通过better-scroll 封装自定义的下拉刷新组件
查看>>
android解决:使用多线程和Handler同步更新UI
查看>>