sping相关
ioc:
作用:降低模块之前的耦合
依赖关系的管理:交给spring框架
依赖:在当前类需要使用其他类或者对象。
1:spring中bean创建的三种方式
1.1:使用默认构造函数创建
在spring的配置文件中使用bean标签,配以id+class属性之后,且没有其他属性和标签时,采用的就是默认构造函数创建bean对象。如果该类中没有默认构造函数的话,则对象无法创建。
<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml"></bean>
1.2:使用普通工厂中的方法创建(使用某个类中的方法创建对象,并存入spring容器,适用于使用jar包中的方法)
<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml"></bean>
<bean id="accountIml" factory-bean="instanceIml" factory-method="getAccountService"></bean>
1.3:使用普通工厂中的静态方法创建
<bean id="instanceIml" class="com.newcapec.service.impl.InstanceIml" factory-method="getAccountService">
2.spring中bean的作用范围
2.1:single 单例模式(默认)
2.2:prototype 多例模式
2.3:request 作用于web应用的请求范围
2.4:session 作用于web应用的会话范围。例如登录界面验证码的比对
2.5:global-session 作用于集群环境的会话范围,如果不是集群的,作用域等同于session。列如负载均衡时会话的作用域
3.bean的生命周期
3.1:单例模式
出生:当容器创建时对象初始化。(初始化xml文件)
活着:只要容器还在,对象就一直还在
销毁:容器销毁则对象死亡。
总结:单例的生命周期和容器相同。
3.2:多例模式
出生:当我们使用对象时,spring框架为我们初始化实例。
活着:对象只要被使用/引用,则一直存活。
销毁:当我们长时间不使用/引用,由java的垃圾回收机制回收销毁。
4.di
依赖关系的维护就称为依赖注入
4.1 能注入的数据:三类
4.1.1 基本数据类型和String
4.1.2 其他bean类型(在配置文件中或者注解配置过的bean)
4.1.3 复杂类型/集合类型
用于给List结构的集合注入标签:
List array set
用于给Map结构的集合注入的标签:
Map props
4.2 注入方式:三种
公共bean
<bean id="now" class="java.util.Date"></bean>
4.2.1 构造方法注入
有参构造:
使用的标签:constructor-arg
标签的位置:bean标签的内部
标签的属性:
type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个或某些参数的类型
index:用于指定要注入的数据给构造函数中指定索引位置的参数赋值。索引的位置是从0开始
name:用于指定给构造函数中指定名称的参数赋值。
value:用于提供基本类型和String类型的数据。
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现的bean对象。
<bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl">
<constructor-arg name="name" value="111"></constructor-arg>
<constructor-arg name="birthday" ref="now"></constructor-arg>
</bean>
4.2.2 set方法注入
默认无参构造:
使用的标签:property
标签的位置:bean标签的内部
标签的属性:
name:用于指定注入时调用的set方法名称。
value:用于提供基本类型和String类型的数据。
ref:用于指定其他的bean类型数据。它指的就是在spring的Ioc核心容器中出现的bean对象。
优势:
创建对象时没有明确的限制,可以直接使用默认构造函数。
劣势:
如果有某个成员必须优质,则获取对象的时候set方法有可能没有注入
<bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl">
<property name="name" value="111"></property>
<property name="birthday" ref ="now"></property>
</bean>
4.2.3 注解注入
<bean id="accountService" class="com.newcapec.service.impl.accountServiceImpl" scope="" init-method="" destroy-method="">
<property name="" value="" ref=""> </property>
</bean>
用于创建对象的
他们的作用就和在xml中编写一个<bean>作用相同.
Component:
作用:用于把当前类对象存入spring容器中
属性:value,用于指定bean的id,不写则默认为该类名首字母小写
Controller:一般用于表现层
Service:一般用于业务层
Repository:一般用于持久层也就是dao层
他们三个的作用和Component一样,他们为spring为我们提供明确的划分。当项目中不止该三层业务时,可以使用Component
用于注入数据的
他们的作用就和在xml中的<bean>标签写<property>作用相同
Autowired:
作用: 自动按照类型注入,只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功。如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
如果ioc容器中有多个类型匹配时:
出现位置:
可以在变量上,也可以在方法上。
细节:
在使用注解注入是,set方法就不是必须的了。
Qualifier:
作用:在按照类注入的基础之上再按照名称注入,再给类成员注入时不能单独使用,方法时可以。
属性:
value:用于指定注入的bean的id
Resource:
作用:直接按照bean的id注入,可以单独使用。
属性:
name:指定bean的id
以上三个注入都只能注入其他bean类型的数据,基本类型和String类型无法使用上述注解实现。另外,集合类型的注入只能通过xml来实现。
value:
作用:用于注入基本数据类型和String类型
属性:
value:用于指定数据的值,可以使用spel表达式。
用于改变作用范围的
他们的作用就和在xml中的<bean>标签中的scope属性相同
scope:
作用:用于指定bean的作用范围
属性:
value:单例,多例
和生命周期相关的
他们的作用就和在xml中的<bean>标签的init-method和destroy-method相同
pridestroy:销毁方法
postconstruct:初始化方法

浙公网安备 33010602011771号