我的第一次Spring学习

来源:互联网 发布:朝鲜 核武 知乎 编辑:程序博客网 时间:2024/05/04 21:30

*****Spring的依赖注入是依赖java的反射机制

 

*****Spring是面向接口编程的方式进行耦合的,达到松耦合。

 

 

*****SpringIoC容器(或依赖注入,控制反转)即应用了软件工程中工厂模式这种设计模式。为对象设置属性的方式即控制反转。

--这种依赖注入方式是一种很好的解耦方式。而SpringBean与配置文件组织在一起,而不是以硬编码(即在需要的地方new一个实例的方式)的方式耦合在一起,以达到解耦合的目的。

 

配置文件:

 

 

1.如何实例化Spring容器:

--ApplicationContext ctx=new ClassPathXmlApplicationContext("***.xml");       --***.xml具体配置文件的名称

 

2.Spring如何管理实例化某个类的对象:(以实例化Chinese类为例,该类实现了Person接口)

--Spring容器的getBean方法(该方法是重载方法)实例化某个类的对象的。

--同时Spring容器是调用该类的无参构造方法实例化该类的。所以如果该类中存在有参的构造方法,必须显式定义无参构造方法。

--Person person=ctx.getBean(“person”,Person.class);

--问题:为何对象的类型说明是接口类?

--因为Spring是以面向接口编程进行松耦合的。这样该对象就可以引用不同的类(这些类都必须实现了接口),只需要在配置文件修改该对象所引用的类的全名即可,Spring容器就自动将这些类的实例化引用赋值给对象变量。

3.Spring如何为对象的属性赋值的:

a) 设值注入:Spring容器在实例化类时,会调用属性的setter方法为属性赋值,此时Spring容器在实例化类还是调用该类的无参构造方法!!

i. 当该属性的类型为数值类型或字符串类型时,配置文件如下:

--<property name=”FieldName” value=”Value”></property>  Value值赋值给属性名为FieldName的属性

 

ii. 当该属性的类型为其他类时,则该属性的类型应该是接口类,原因:请看上面

  部分

--配置文件的定义:

 

 

 

b) 构造注入:属性的初始化在该类的有参构造方法中实现,此时Spring容器会调用该类的有参构造方法为属性初始化

类文件:

 

配置文件:

注意:    index用于指定该构造参数值将作为第几个构造参数值。

 

 

 

 

****设值注入与构造注入的区别:

I.   设值注入是先通过无参数的构造器实例化类,然后调用对应的属性的setter方法注入依赖关系

II.   构造注入是直接通过调用有参数的构造器,在实例化类的同时,就已经完成了对依赖关系的注入。

 

--问题:那应该选择哪种方式对依赖关系进行注入?

--答:建议采用设值注入为主,构造注入为辅

0 0