首先我们用基于maven的spring项目来管理和构建Java项目。
springioc基于xml使用
maven项目结构如下图
首先我们要配置依赖,如果我们没有用maven需要导入jar包,这里用maven非常方便只需要在pom.xml配置文件里配置依赖就相当于导入jar包
首先第一步测试下环境是否可用
User类中内容
在spring-ioc.xml
创建测试类
用@Test注解进行测试
第一步加载spring上下文
输出User对象
输出成功证明maven成功安装完成
用@Test要导入junit依赖包
<scope>作用是编译的作用域默认是compile全作用域,test是在test里作用的不跟.class一起进行编译
springioc会把所有的bean(对象)都加载到ioc容器里在容器实例化(调用构造函数)
通过类来获取bean(对象)
通过id或者名字来获取bean(对象)
通过id和类型获取bean(对象)
<description>作用是用来描述一个bean(对象)是用来干嘛的
import如下面注解描述
设置Bean(对象)的别名方法如下(注意要来的名字也可以用如下面的id=user)
用@Before注解作用是每一个用@Test都会先调用@before里面的内容
使用nama也可以设置别名
基于setter方式来注入属性首先一定要在类里设置get和set方法,name=xxx的名字是根据setxx来决定的
基于构造函数的依赖注入(构造函数是有参的里面有几个参数下面值能设几个)
也可以不用加name来设置值但是有个弊端如果你调换赋值顺序会出现赋值错误的情况
解决方法可以把name在对应的加回来
还可以用index来解决如下图对应的参数是 0 1 2
还可以用type(根据类型来赋值但是有弊端如果有相同的类型就解决不了了)来解决
复杂数据类型的依赖注入先构建get set和tostring方法![](https://i-blog.csdnimg.cn/direct/21d43e83a18a42de9ca8fc339b48e329.png)
此图是设置null值和空值的方法
在一个类中有类属性咋赋值的方法如下图(引用外部bean的方式)ref里要写对应要引用的id名字
使用内部bean依赖注入其他bean的方式![](https://i-blog.csdnimg.cn/direct/0b6f5e7659124e1d89389aeee3b6579f.png)
给list<string>赋值方法如下图,如果把<string>改成<对象>如<wife>就得把<value>改成<bean>
给map赋值方法
用p命名空间方法作用简化用set属性方式注入但是要是集合的话还是得用set注入的方法
使用c命名空间简化用构建方法的方式依赖注入
用来控制bean的执行顺序的方法用depends-on
懒加载用lazy-init="true"该bean(对象)就只能在用的时候在创建bean对象
让该xml文件中的bean都变成懒加载的方法
一个bean只能创建一次对象想创建两个或者多个的方法一个是把作用域该为prototype或者是创建多个不同id的bean
创建两个不同id的bean
改作用域方法
用静态方法实例化bean
使用实例化工厂方式实例化
根据类型(byType)来自动注入用autowire在Person类中有wife属性用了autowire就会自动在xml文件中找对应的wife就不用ref来引用了
但是出现多个id的时候就会出问题
用byName根据set方法名自动匹配,根据的是person里的setWife的名字
用constructor 根据构造器去匹配,根据构造函数的参数来匹配如下图wife,如果wife改了对应的this也需要改,xml里的id也需要改
如果构造函数参数变多,对应的bean也得相同变多
当根据类型匹配但是有多个相同类型不同id名时用primary可以优先用它
或者可以用auto-candidate来禁止这个bean自动注入
配置第三方bean
要配置第三方bean需要先在pom.xml里导入依赖如下图
调用测试类
引用外部属性资源文件方式
<context:property-placeholder location="db.properties"></context:property-placeholder>