Spring的一些知识
ApplicationContext的三个常用实现类
ClassPathXmlApplicationContext:可以加载类路径下的配置文件
FileSystemXmlApplicationContext:可以加载磁盘任意路径下的配置文件(要有访问权限)
AnnotationConfigApplicationContext:读取注解创建容器
核心容器的两个接口引发出的问题
ApplicationContext: 单例对象使用 他在构建核心容器时,创建对象的策略是立即加载读取完配置文件就创建配置文件中的对象
BeanFactory:
延迟加载的策略,根据Id获取对象了才开始创建对象
创建bean的三种方式
1.使用默认构造函数创建
在spring的配置中使用bean标签,配以id和class属性之后,且没有其他属性和标签时.采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数则无法创建
<bean id = "实际创建的对象名" class="对象类"></bean>
2.使用普通工厂中的方法创建对象
<bean id = "工厂类名" class="工厂方法类"></bean>
<bean id = "实际创建的对象名" factory-bean = "工厂类名" facatory-method = "工厂类内的构建方法 "></bean>
3.使用工厂中的静态方法创建对象
<bean id = "实际创建的对象名 " class = "工厂方法类" facatory-method = "工厂内的静态方法"></bean>
bean的作用范围
bean标签的scope属性:
1)singleton(单例)
2)prototype(多例)
3)request(作用于web应用的请求范围)
4)session(作用于web应用的会话范围)
5)global-session(作用于集群的会话范围如果没有则是session)
bean对象的生命周期
单例对象:
1)出生:当容器创建是对象出生
2)存在:只要容器还在,对象存在
3)死亡:容器销毁,对象死亡
4)总结:与容器生命周期相同
多例对象:
1)出生:使用对象时创建对象
2)存在:对象在使用过程中就存在
3)死亡:对象长时间没用由Java的垃圾回收机制
Spring的依赖注入Dependecy Injection
能注入的数据有三类:
1)基本类型和String
2)其他bean类型(在配置文件中或注解配置过的bean)
3)复杂类型/集合类型
注入方式三种:
1)使用构造函数提供
2)使用set方法提供
3)使用注解提供
1.构造函数注入
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>
2.set方法
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
结构相同,标签可以互换
基于注解的IOC配置
1.用于创建对象的注解
与xml配置文件中编写一个bean标签实现的功能是一样的
2.用于注入数据的注解
与xml配置文件中编写一个property标签实现的功能是一样的
3.用于改变作用范围的注解
在bean标签中使用scope属性实现的功能是一样的
4.和生命周期想换的注解
在bean标签中使用init-method和destory-method属性实现的功能是一样的
@Component [kəmˈpəʊnənt]组成部分;成分;部件
用于创建对象的
作用:用于把当前类对象存入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一样
@Autowried
用于注入数据
作用:自动按照类型注入,只要容器中有唯一的bean对象类型和要注入的变量类型匹配
如果没有任何bean类型匹配则报错
多个类型匹配时找到类型相同的集合再匹配变量名
出现位置:可以出现在变量上和方法上
在使用注解注入时,set方法就不是必须的了
@Qualifier
作用:在按照类中注入的基础之上再按照名称注入,再给类成员注入时不能单独使用,在给方法参数注入式可以
@Resource
作用:直接按照bean的id注入.他可以独立使用
属性:name:用于指定bean的id
都只能注入其他bean类型的数据,而基本类型和Stirng类型无法使用上述注解实现
@value
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值,它可以使用spring中Spel
SpEl的写法:${表达式};
@Scope
作用:用于指定bean的范围
属性:singleton,prototype;
@PreDestroy@PostConstruct
作用:用于指定初始化方法