Spring的一些知识1

Spring的一些知识

ApplicationContext的三个经常使用实现类

ClassPathXmlApplicationContext:能够加载类路径下的配置文件
FileSystemXmlApplicationContext:能够加载磁盘任意路径下的配置文件(要有访问权限)
AnnotationConfigApplicationContext:读取注解建立容器
复制代码

核心容器的两个接口引起出的问题php

ApplicationContext: 单例对象使用 他在构建核心容器时,建立对象的策略是当即加载读取完配置文件就建立配置文件中的对象java

BeanFactory:web

​ 延迟加载的策略,根据Id获取对象了才开始建立对象spring

建立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(单例)session

2)prototype(多例)函数

3)request(做用于web应用的请求范围)spa

4)session(做用于web应用的会话范围)prototype

5)global-session(做用于集群的会话范围若是没有则是session)code

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-methoddestory-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

做用:用于指定初始化方法

相关文章
相关标签/搜索