加载配置文件的第二种写法(表示从文件系统进行寻找,取值是盘符) ApplicationContext applicationContext =new FileSystemXmlApplicationContext( 这里是配置文件的绝对路径)
注意:spring加载配置文件会把配置的ben文件实例化,放到容器中, 这个过程专业名词叫做控制反转也就是ioc,这个容器也叫做ioc容器
注意ioc是负责创建对象的不负责为对象的属性进行赋值,
而依赖注入DI则是给对象属性赋值的
spring的依赖注入,就是给对象中的属性赋值 依赖注入共有四种
1.set方法
2.构造方法
3.p命名空间
4.spel方式进行注入
依赖注入的第一种方式 set方式:这种方是依赖于set方法 创建一个xml配置文件里面的bean标签 属性 id 这个bean的命名 (是唯一值不能重复) 属性 class为对象地址, prioperty标签里面为id这个对象的属性,voulse属性为赋的值 如果对象的属性是一个集合的话 使用property标签,name为属性名 里面嵌套list标签
1.set方式为对象属性进行赋值 使用property name:属性名 vaule:属性值 ref:另外一个bean的标签的id set创建普通的方法 例子:
set为对象里面的自定义对象进行赋值操作 例子:
set方式为List集合进行赋值
1
2
3
4
2.构造方法给属性赋值 和get set无关,与构造方法有关 使用constructor-arg的方式进行赋值其属性 index:指的是为构造方法中的第几个 vaule赋值
属性name:指的就是哪一个构造函数 例子 ,他们两个用一个就好
//使用索引的方式对对象赋值
< -arg name="username" value="辉哥"/>
p命名空间(不常用) 依赖于set方法 p命名空间赋值时放在标签属性的位置 p命名空间使用时需要导入头部信息 基本类型的话直接
p:属性名=赋值
引用数据类型的话
p:属性名-ref="" pel方式(没讲)
三种赋值方式最常用的是set方式 给数组赋值的方式
1.property name=ids vaule={x,x,x}(虽然可以使用,但是不能用)
2.property name=属性名 array ref bean=“外接bean
” 例子:
给list集合复制 例子:
1
2
3
4
给set集合复制(注意,如果有重复的话,只会赋值一个)
集合标签之间可以相互转换的 例子:(结果只会附上一个值,应为set无序qie不可重复)
1
1
1
1
给自定义对象赋值 自我命名 外接,内联两种方式 例子:
(外接) 例子:
(内联)
map集合赋值方式 同上集合相差不多 property标签换成entity标签 例子:
map与properties可以混合使用 如果是集合里面是引用数据类型就可以直接外接
spring方式为我们创建对象的方式 第一种:默认情况下 通过无参构造的方式进行生成(注意以后定义参数时候,生成无参构造)
第二种:示例工程 定义一个工程类 在工程类里面定义一个普通的方法,返回对象生产的对象 实例工厂中的标签中的注意点为 id等于对象名 factory-bean定义的工厂id 也就是在使用实例工程时候 bean标签的id factory-method 表示调用生成对象的方法,也就是工厂里面生产对象的方法 例子:
(实例工厂生产对象)
<bean id="UserOneService"class="com.xu.www.service.UserOneService"/>
(👇 上面定义的那个工厂的名字) (👇工厂里面的方法名)
第三种:静态工程进行创建 过程:创建函数 bean的生命周期
1.默认情况下容器启动时,对象就创建好了,放到了容器中,获取对象的过程只是从容器中取 2.默认情况下:容器spring帮我们创建对象是一个单实例的
3.我们可以开启懒加载的方式改变默认模式,使之获取时候在进行加载(注意:只有第一次创建这个对象才会进行创建对象) lazy-init=“true”开启懒人模式
4.开启多例模式:获取一此创建一次对象,
注意:这些标签都是定义在工厂的那个标签中的
scope模式 propertity(不太常用) 可以通过设置函数方法 指定bean的生名周期 UserService 构造方法 默认实例化时候运行 init指定运行的方法 destory 销毁的方法 不过需要在标签中进行指定才会运行
例子:
public UserService() { System.out.println("构造方法"); }
@Before
public void init() { System.out.println("类先执行了"); }
@After
public void destory(){ System.out.println("对象销毁了"); }
使用包扫描的方式进行创建对像加入容器中
1.首先导入aop包进行配置
2.导入命名空间的<context:(到这里会出现提示,选择结尾为context的值)component-scan (spring的组件扫描,配置的是一个包,会扫描这个包里面带component这个注解的类 默认的id是这个类的首字符小写,如果在这个注解的后面自记定义这个类的id)
注意点: HuiGe huiGe = applicationContext.getBean("huiGe", HuiGe.class);这两个在一定程度上来说是一个 配置bean与包扫描的应用场景 首先是自己写的类可以使用包扫描(也就自己写的才可以使用包扫描的)
系统组件的花用bean就好 通过组件扫描放进容器后只能通过注解的方式进行为属性赋值了 使用propertySource 表示加载外部配置文件,但是这个注解想要成功这个类必须加入到spring容器中(这个加入意思是要嘛配置bean,要吗使用注解) 注意:配置文件中不要使用username 会冲突直接使用user即可