说明:本文展示的代码和例子是承接我的上一个 关于IoC的介绍的文章。所以在阅读本文的时候,如果遇到的例子您无法理解,请移步阅读上文。
引言
- 为了更好的加强代码的独立性,方便程序员分工合作和代码维护,所以在面向对象编程时采用IoC方式;
- 而IoC方式简单来说就是,在一个方法中,我需要的类不用我自己去创建(也称new出来),我们通过一个外部的容器(spring框架)帮我们创建这个类并把它注入进来,这个过程也就是我们前面提到的依赖注入;
- 上文我们讲到如何去简单的使用IoC和配置使用环境,而使用IoC大概需要以下三个流程。
1、第一步导入包(与spring相关联的包)
2、配置文件(配置Bean的过程)
3、获取一个工厂,对象由工厂创建
但是只是简单创建并不能满足我们的日常开发使用,如果我想由容器创建一些有初始参数的类,那该怎么办?
所以下面就开始介绍通过xml配置文件实现Spring Bean的进一步管理。
给创建的类的属性附上初始参数
假设我们定义了一个类叫Account,Accout类中有三个属性(如上图),需要在工厂为我们创建对象的时候就附上初始参数的配置文件写法如下。
<bean id="account" class="org.csu.spring.demo.ioc.domain.Account">
<property name="username" value="John"/>
<property name="password" value="123456"/>
<property name="age" value="18"/>
</bean>
配置文件中加入下面的语句name就是属性名,value是属性的值,值不用考虑类型,容器会根据属性类型来赋值。
<property name="?" value="?"/>
如果创建的类中需要内置类赋值,那应该怎么办?
假设需要容器创建acconutService对象,并需要给其中的内置类accountDAO插入初始值,如下图;
我们需要在application.xml文件中这样写:
<!--创建accountDAO对象-->
<bean id="accountDAO" class="org.csu.spring.demo.ioc.persistence.AccountDAOImpl"/>
<bean id="accountService" class="org.csu.spring.demo.ioc.service.AccountService">
<property name="accountDAO" ref="accountDAO"/>
</bean>
注意:我们一定要先在配置文件中创建该对象,配置过它以后才能在后面把它做为值传入需要创建的对象中。
而后面对象配置的写法很相似于对变量的,但是不一样的是,在name后面,变量的是value,而对象的是ref。
注入的值的方式有两种,上述采取的是第一种注入方式
而另外一种叫构造注入
下面介绍一下采用构造注入的流程
构造注入
什么是构造注入?
构造注入就是我们需要创建的对象的类中有一个构造方法,我们通过这个构造方法把初始值传入进去
applicationContext.xml文件的写法
<bean id="account" class="org.csu.spring.demo.ioc.domain.Account">
<!-- 构造注入使用 -->
<constructor-arg name="username" value="John"/>
<constructor-arg name="password" value="123456"/>
<constructor-arg name="age" value="18"/>
</bean>
使用构造注入插入初始值的写法也类似于第一种注入方式,区别就在于需要创建的对象的类中有一个构造函数,并且在写配置文件的时候把property改成constructor-arg。(现在也不知道构造注入的优势在哪?应该只是两种注入方式适合不同的情况吧。)
这个是变量的构造注入的区别,而内部类的构造注入也是这样的