每日总结[1] 20191001 初识Spring//Beans/控制反转/依赖注入/Date转换

(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中进行配置。

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

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

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

而依赖注入则是通过在applicationContext中???不记得了。

(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值,它是会自动通过类的全名 [改:全限定类名] 进行赋值的。

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

<property=“name” value=“jiajia”>

是调用了该类的setter方法。

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


即可。

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

<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:







]

  • Spring中的Bean机制是单例的。
  • 还可以通过注解进行装配。
发布了47 篇原创文章 · 获赞 1 · 访问量 1287

猜你喜欢

转载自blog.csdn.net/weixin_41750142/article/details/101938508