ClassPathXmlApplicationContext:能够加载类路径下的配置文件
FileSystemXmlApplicationContext:能够加载磁盘任意路径下的配置文件(要有访问权限)
AnnotationConfigApplicationContext:读取注解建立容器
复制代码
核心容器的两个接口引起出的问题php
ApplicationContext: 单例对象使用 他在构建核心容器时,建立对象的策略是当即加载读取完配置文件就建立配置文件中的对象java
BeanFactory:web
延迟加载的策略,根据Id获取对象了才开始建立对象spring
在spring的配置中使用bean标签,配以id和class属性以后,且没有其余属性和标签时.采用的就是默认构造函数建立bean对象,此时若是类中没有默认构造函数则没法建立数组
<bean id = "实际建立的对象名" class="对象类"></bean>
复制代码
<bean id = "工厂类名" class="工厂方法类"></bean>
<bean id = "实际建立的对象名" factory-bean = "工厂类名" facatory-method = "工厂类内的构建方法 "></bean>
复制代码
<bean id = "实际建立的对象名 " class = "工厂方法类" facatory-method = "工厂内的静态方法"></bean>
复制代码
1)singleton(单例)session
2)prototype(多例)函数
3)request(做用于web应用的请求范围)spa
4)session(做用于web应用的会话范围)prototype
5)global-session(做用于集群的会话范围若是没有则是session)code
1)出生:当容器建立是对象出生
2)存在:只要容器还在,对象存在
3)死亡:容器销毁,对象死亡
4)总结:与容器生命周期相同
1)出生:使用对象时建立对象
2)存在:对象在使用过程当中就存在
3)死亡:对象长时间没用由Java的垃圾回收机制
1)基本类型和String
2)其余bean类型(在配置文件中或注解配置过的bean)
3)复杂类型/集合类型
1)使用构造函数提供
2)使用set方法提供
3)使用注解提供
1)使用标签:constructor-arg
2)标签出现的位置:bean标签的内部
3)标签中的属性
type:用于指定要注入的数据的数据类型
index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值,索引的位置从0开始
name:用于指定给构造函数中指定名字的参数赋值
value:用于给基本类型和String类型的数据
ref:其余的bean类型数据
复制代码
<bean id = " " class = " ">
<constructor-arg name = " " value = " "></constructor-arg>
<constructor-arg name = " " ref = "a"></constructor-arg>
</bean>
<bean id = "a" class = " "></bean>
复制代码
1)标签:property
2)出现的位置:bean标签的内部
3)标签的属性:
name:用于指定给构造函数中指定名字的参数赋值
value:用于给基本类型和String类型的数据
ref:其余的bean类型数据
复制代码
<bean id = " " class = " ">
<property name = " " value = " "></property>
<property name = " " ref = " "></property>
</bean>
复制代码
3.复杂类型的注入
<bean id = " " class = " ">
<property name = " 一个字符串数组">
<array>
<value>String</value>
<value>String</value>
<value>String</value>
</array>
</property>
</bean>
<bean id = " " class = " ">
<property name = " 一个list">
<list>
<value>String</value>
<value>String</value>
<value>String</value>
</list>
</property>
</bean>
<bean id = " " class = " ">
<property name = " 一个set">
<set>
<value>String</value>
<value>String</value>
<value>String</value>
</set>
</property>
</bean>
<bean id = " " class = " ">
<property name = " 一个set">
<map>
<entry key = " " value = " "></value>
<entry key = " ">
<value>String</value>
</entry>
</map>
</property>
</bean>
<bean id = " " class = " ">
<property name = " 一个set">
<props>
<prop key = " ">String</prop>
</props>
</property>
</bean>
复制代码
用于给List结构集合注入的标签
list array set
用于给Map结构集合注入的标签
map props
结构相同,标签能够互换
1.用于建立对象的注解
与xml配置文件中编写一个bean标签实现的功能是同样的
2.用于注入数据的注解
与xml配置文件中编写一个property标签实现的功能是同样的
3.用于改变做用范围的注解
在bean标签中使用scope属性实现的功能是同样的
4.和生命周期想换的注解
在bean标签中使用init-method和destory-method属性实现的功能是同样的
用于建立对象的
做用:用于把当前类对象存入spring容器中
属性:
value: 用于指定bean的id.当咱们不写时,他的默认值是当前类名,类名首字母小写.
告知Spring在建立容器是要扫描的包,配置所须要的标签不是在beans的约束中,而是在一个名称为context名称空间和约束中
<context:component-scan pase-package=" "></context:component-scan>
复制代码
Aopjar包xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd ">
复制代码
@Contorller@Service@Repository
@Contorller通常用于表现层
@Service通常用于业务层
@Repository通常用于持久层
做用和属性和component同样
用于注入数据
做用:自动按照类型注入,只要容器中有惟一的bean对象类型和要注入的变量类型匹配
若是没有任何bean类型匹配则报错
多个类型匹配时找到类型相同的集合再匹配变量名
出现位置:能够出如今变量上和方法上
在使用注解注入时,set方法就不是必须的了
@Qualifier
做用:在按照类中注入的基础之上再按照名称注入,再给类成员注入时不能单独使用,在给方法参数注入式能够
@Resource
做用:直接按照bean的id注入.他能够独立使用
属性:name:用于指定bean的id
都只能注入其余bean类型的数据,而基本类型和Stirng类型没法使用上述注解实现
@value
做用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值,它可使用spring中Spel
SpEl的写法:${表达式};
做用:用于指定bean的范围
属性:singleton,prototype;
做用:用于指定初始化方法